目錄:
1、git的優勢
2、需理解的概念
3、操作指令
本篇文章只將git是什麼,git的優勢,以及常用的操作指令,不會涉及到git庫的安裝,環境配置等。
1、git的優勢
- git是分散式版本管理系統,svn等的是集中式(有安全隱患,伺服器掛了就都沒了)。
- git跟蹤並管理的是修改,而非檔案。
2、學習git之前需要理解的概念:
版本庫:
又名倉庫(respository),可將其理解成一個目錄,該目錄下的所有檔案都會被git管理起來,每個檔案的修改、刪除、git都能跟蹤,以便隨時追蹤歷史,和還原。 .git隱藏目錄就是git的版本庫,裡面存了很多東西,最重要的就是stage(index)暫存區,還有第一個分支master,以及指向master的HEAD指標。
工作區:
就是在電腦裡能看到的目錄
暫存區
暫存區(stage)就是每次git add時,檔案的修改存放的地方。git commit時就是一次性把暫存區所有修改提交到分支。
HEAD
HEAD是一個指標,總是指向當前分支。倉庫版本的回退和追蹤都是通過操作HEAD指標來完成。
標籤(tag)
有了commit id為什麼還要tag,因為commit id不好找,tag是有意義的名字,它與commit綁在一起。
其他要點
- 每一次git commit,都會生成一個commit id記錄該次提交,Git都會將它們串成一條時間線,這條時間線就是一個分支。
- 因為建立、合併、刪除分支都很快,所以git鼓勵你使用分支完成某個任務,合併後再刪除分支。過程比直接在master分支工作更安全,且效果一樣。
- 分支策略:master分支應該是非常穩定的,僅用來發布新版本,平時不能在上面幹活,幹活都在dev分支,dev是不穩定的,到1.0釋出時,再將dev合併到master上,由master釋出新版本。
3、操作指令
---------- 基本操作指令-----------
git init :建立倉庫
git add [file]:新增檔案到暫存區
git commit -m "[content]":提交檔案到倉庫
git status:檢視倉庫當前的狀態
git diff:檢視修改內容
git diff HEAD -- [file]:檢視工作區和版本庫裡最新版本的區別
git log:檢視歷史記錄(退出git log:英文狀態下按Q)
git log --pretty=oneline:一行檢視歷史記錄
git reset --hard HEAD^:回退上到上一個版本
git reset --hard [commit id]:回到指定的某個版本
git reset HEAD [file]:把暫存區的修改撤銷,重新放回工作區
git reflog:檢視命令歷史(此方法可以獲取commit id)
git checkout -- [file]:丟棄工作區的修改(1、沒有放到暫存區時:撤銷會回到和版本庫一模一樣的狀態。2、已加到暫存區:撤銷修改會回到天津到暫存區後的狀態):本質是用版本庫裡的版本替換工作區的版本。
git rm [file]:刪除某個檔案
-----------分支操作指令---------
git branch:檢視當前分支,當前分支前會有*號。
git branch [name]:建立一個分支
git checkout [name]:切換分支
git checkout -b [name]:建立並切換分支
git merge [name]:指定分支到當前分支(Fast-forward模式:刪除分支後會丟掉分支資訊)
git merge --no-ff -m "content" [name]:--no-ff表示禁用Fast-forward模式,
git branch -d [name]:刪除一個分支
git log --graph --pretty=oneline:檢視分支合併圖
git branch -D [name]:進行強行刪除,丟棄一個沒有被合併的分支
-----------修改bug時----------
git stash:手頭工作沒有完成,用stash把工作現場儲存起來,可放心建立分支修復bug。
git stash list:檢視工作現場的儲存庫
git stash apply:恢復,但stash內容不會刪除。
git stash drop:刪除stash內容
git stash pop:恢復的同時把stash內容也刪了
git stash apply stash@{0}:多次stash時,可以恢復指定的stash。
-----------遠端倉庫操作指令--------
git remote:檢視遠端倉庫資訊
git remote -v:檢視更詳細的資訊
git remote add origin [遠端倉庫地址]:新增遠端伺服器地址,私鑰配在遠端倉庫,所以ssh公鑰必須在電腦的賬戶列表中才能推上去。
git push -u origin master:把當前分支推到遠端,-u表示將本地的master分支推送到origin主機,同時指定origin為預設主機,後面就可以不加任何引數使用git push了。
git clone [遠端倉庫地址]:將遠端倉庫克隆到當前目錄下
git push origin [name]:從本地推送分支,如果失敗,先用git pull抓取遠端的新提交
git pull:抓取遠端分支的新提交,如果提示"no tracking information",說明本地分支和遠端分支的連結關係沒有建立,要用以下命令
git brach --set-upstream [name] origin/[name]:本地分支和遠端分支建立連結。
-----------建立ssh key到系統使用者目錄--------
ssh-keygen -t rsa -C "youremail@example.com"
-----------標籤管理-----------
git tag:檢視所有標籤
git tag [name]:在當前分支下打出一個新標籤,預設標籤是打在最新提交的Commit上的。
git tag [name] [commit id]:對某一個commit id打上標籤
git show [tag-name]:檢視某個標籤資訊
git tag -a [name] -m "[content]":建立帶有說明的標籤,-a標籤名,-m說明文字。
git tag -d [name]:刪除本地標籤
git push origin :refs/tags/[tag-name]:刪除一個遠端標籤
git push origin [tag-name]:推送某個標籤到遠端
git push origin --tags:一次性推送所有標籤
複製程式碼