1. 團隊工作基本模型
建立初始遠程倉庫->各人拉取遠程倉庫到本地->建立自己的開發(fā)分支->開發(fā)完成后push新的分支到遠程倉庫,以保存且同步->review代碼后無問題,合并到master分支
2. 創(chuàng)建并切換到自己分支工作
查看所有分支
git branch -a
說明:后面的參數(shù)-a表示查看所有的分支,主要應用于從遠程pull下來的分支,因為遠程拉過來的分支非自己創(chuàng)建的,所以直接git branch看不到
切換分支
git branch <分支名>
創(chuàng)建并切換到這條分支
git checkout -b <分支名>
把當前分支push到遠程
git push origin <分支名>
說明:第一次創(chuàng)建遠程沒有的分支時,push需要帶上分支名。后面git push不加參數(shù)時,就會默認推送到這個指定的分支了。
推送分支且和遠程分支同步
git push origin <分支名> -u
說明:可以發(fā)現(xiàn)用上面的git push后,雖然把本地的分支推送上遠程倉庫了,但是此時想要git pull的話,會出現(xiàn)類似于這樣一個提示

意思就是說當前這個分支還沒有遠程跟蹤,所以沒有辦法拉取遠程代碼。而在git push后面加一個-u就是解決這個問題。當然了,也可以不加這個參數(shù),然后在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. 文件的三種狀態(tài)以及各自的撤銷方法:
- 未加入暫存區(qū)
git checkout <文件名>
- 已加入暫存區(qū),未提交更改
git reset HEAD
- 已提交更改
git reset --hard HEAD^
4. 快捷提交(add+commit)
git commit -a
5. 合并分支
假設當前HEAD在master上,需要合并feature1的分支
git merge feature1
這里會有這幾種情況:
-
master分支和feature1分支產生分叉,那么git會把feature1分支從分叉的地方開始的所有的更改內容合并到master上,并生成一個新的commit。但是master分支里不會有feature1分支的commit記錄。 -
master分支和feature1分支沒有分叉且feature1分支領先于master分支。換言之,從master拉出feature1分支后,master分支一直沒有任何提交,只有feature1分支有提交內容。此時git會執(zhí)行fast-forward操作,直接把master和HEAD移動到feature1的位置上。同時master也會包含feature1的所有commit歷史。此時master和feature1處在同一commit的節(jié)點。 -
master分支和feature1分支沒有分叉且master分支領先于feature1分支。換言之,從master拉出feature1分支后,feature1分支一直沒有任何提交,只有master分支有提交內容。此時git不會執(zhí)行任何操作,命令行會提示Already up to date。反過來,切換到feature1分支,然后執(zhí)行git merge master,可以將HEAD和feature1移動到master的位置。與上面同理,feature1也會包含master的所有commit歷史。此時master和feature1處在同一commit節(jié)點。(這也映證了分支并無主次之分,所有分支都是平等的,并不會因為有的分支叫master就會針對它會有一些特殊性。--這是git的特性,github還是有寫區(qū)別的)
6.實用黑科技
stash:臨時存放工作目錄的改動。在 Git 中,stash指令可以幫你把工作目錄的內容全部放在你本地的一個獨立的地方,它不會被提交,也不會被刪除,你把東西放起來之后就可以去做你的臨時工作了,做完以后再來取走,就可以繼續(xù)之前手頭的事了。
具體說來,stash 的用法很簡單。當你手頭有一件臨時工作要做,需要把工作目錄暫時清理干凈,那么你可以:
git stash
就這么簡單,你的工作目錄的改動就被清空了,所有改動都被存了起來。
重新取出這個緩存繼續(xù)之前的代碼編寫:
git stash pop
說明:
沒有被 track 的文件(即從來沒有被 add 過的文件不會被stash 起來,因為 Git 會忽略它們。如果想把這些文件也一起stash,可以加上 -u 參數(shù),它是 --include-untracked 的簡寫。就像這樣:
git stash -u
參考鏈接:
git push與pull的默認行為 https://segmentfault.com/a/1190000002783245