Git實用命令指南

weixin_34342992發表於2018-11-26

1. 團隊工作基本模型

建立初始遠端倉庫->各人拉取遠端倉庫到本地->建立自己的開發分支->開發完成後push新的分支到遠端倉庫,以儲存且同步->review程式碼後無問題,合併到master分支

2. 建立並切換到自己分支工作

檢視所有分支

git branch -a

說明:後面的引數-a表示檢視所有的分支,主要應用於從遠端pull下來的分支,因為遠端拉過來的分支非自己建立的,所以直接git branch看不到
切換分支

git branch <分支名>

建立並切換到這條分支

git checkout -b <分支名>

把當前分支push到遠端

git push origin <分支名>

說明:第一次建立遠端沒有的分支時,push需要帶上分支名。後面git push不加引數時,就會預設推送到這個指定的分支了。
推送分支且和遠端分支同步

git push origin <分支名> -u

說明:可以發現用上面的git push後,雖然把本地的分支推送上遠端倉庫了,但是此時想要git pull的話,會出現類似於這樣一個提示

4050018-00c1141314e9dc6d.png
image.png

意思就是說當前這個分支還沒有遠端跟蹤,所以沒有辦法拉取遠端程式碼。而在git push後面加一個-u就是解決這個問題。當然了,也可以不加這個引數,然後在pull的時候按照這個命令提示,加上遠端分支的跟蹤。

3.拉取遠端倉庫

初始拉取遠端倉庫

git clone <git倉庫連結>

說明:git clone操作會拉取遠端倉庫的所有分支,不過拉下來後預設是處於master分支,可以使用git branch -a來檢視所有的分支。使用git checkout <分支名>來切換到指定分支。
同步遠端程式碼到本地

git pull

說明:git pull不加分支名,表示拉取遠端倉庫所有預設同步的分支。這裡預設同步的分支是初次git clone的時候遠端倉庫裡包含的分支。git clone之後,遠端倉庫新新增的分支,則是拉不到的。如果要拉取新的分支,就需要指定分支名:git pull origin <分支名>

3. 檔案的三種狀態以及各自的撤銷方法:

  1. 未加入暫存區
git checkout <檔名>
  1. 已加入暫存區,未提交更改
  git reset HEAD
  1. 已提交更改
 git reset --hard HEAD^

4. 快捷提交(add+commit)

git commit -a

5. 合併分支

假設當前HEADmaster上,需要合併feature1的分支

git merge feature1

這裡會有這幾種情況:

  1. master分支和feature1分支產生分叉,那麼git會把feature1分支從分叉的地方開始的所有的更改內容合併到master上,並生成一個新的commit。但是master分支裡不會有feature1分支的commit記錄。
  2. master分支和feature1分支沒有分叉且feature1分支領先於master分支。換言之,從master拉出feature1分支後,master分支一直沒有任何提交,只有feature1分支有提交內容。此時git會執行fast-forward操作,直接把masterHEAD移動到feature1的位置上。同時master也會包含feature1的所有commit歷史。此時masterfeature1處在同一commit的節點。
  3. master分支和feature1分支沒有分叉且master分支領先於feature1分支。換言之,從master拉出feature1分支後,feature1分支一直沒有任何提交,只有master分支有提交內容。此時git不會執行任何操作,命令列會提示Already up to date。反過來,切換到feature1分支,然後執行git merge master,可以將HEADfeature1移動到master的位置。與上面同理,feature1也會包含master的所有commit歷史。此時masterfeature1處在同一commit節點。(這也映證了分支並無主次之分,所有分支都是平等的,並不會因為有的分支叫master就會針對它會有一些特殊性。--這是git的特性,github還是有寫區別的)

6.實用黑科技

stash:臨時存放工作目錄的改動。在 Git 中,stash指令可以幫你把工作目錄的內容全部放在你本地的一個獨立的地方,它不會被提交,也不會被刪除,你把東西放起來之後就可以去做你的臨時工作了,做完以後再來取走,就可以繼續之前手頭的事了。
具體說來,stash 的用法很簡單。當你手頭有一件臨時工作要做,需要把工作目錄暫時清理乾淨,那麼你可以:

git stash

就這麼簡單,你的工作目錄的改動就被清空了,所有改動都被存了起來。
重新取出這個快取繼續之前的程式碼編寫:

git stash pop

說明:
沒有被 track 的檔案(即從來沒有被 add 過的檔案不會被stash 起來,因為 Git 會忽略它們。如果想把這些檔案也一起stash,可以加上 -u 引數,它是 --include-untracked 的簡寫。就像這樣:

git stash -u

參考連結:
git push與pull的預設行為 https://segmentfault.com/a/1190000002783245