前言
最流行的工作流來啦:Feature Branching,還有很多應該注意的用法。
核心
任何新的功能(feature)或 bug 修復全都新建一個 branch 來寫;
branch 寫完後,合併到 master,然後刪掉這個 branch。
有了前面的基礎,這兩句話還是很好理解的。
刪除遠程分支使用的命令:
git push origin -d another
一般我們開發好another分支並review(一般會創建遠程another分支便於共享代碼)之後,先在本地pull一下遠程倉庫,然後再merge。
除此之外,github之類的服務還會有pull request之類的服務,便於多人之間的交流和合並刪除分支的便利,但這部分並不是git的內容。
其他的也沒什麼了,這種工作流之所以流行與其簡單的核心架構也有很大關係。
關於log
git log還有一些可選參數
❯ git log -p
可以查看具體改動
❯ git log --stat
可以查看簡要改動
git show
可以查看當前一條commit
除此之外還有如git diff等查看未提交改動之類的方法。
rebase
我們知道branch+merge的操作到最後肯定會生成一個環,這個環的起點是分叉點,終點是合併點。我們也可以使用branch+rebase+merge的操作打破這個環。
reset
提交錯了怎麼辦?
可以放棄:
git reset --hard HEAD^
這樣就可以放棄最新的提交
revert
推錯了怎麼辦?
可以使用revert來把之前的commit取反:
git revert HEAD^ +''
‘’中的內容即HEAD的編號,想撤銷哪次commit就填上哪個的編號。他會提供一次新的提交,而該次提交與想撤銷的提交是取反的,抵消下來,相當於那次提交被撤銷掉了。
有用的stash
如果我們簽了一個新的分支,開發了一半,這時忽然有緊急事情要我們去做,可能來不及做個新的commit,這時我們可以使用stash暫存開發進度。
git stash
git stash pop
這裏有個小例子:
❯ ls
目錄: C:\Users\starinsun\Documents\test\git_work\another
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2020/2/7 11:44 1714 .gitignore
------ 2020/2/7 12:13 17 another.md
-a---- 2020/2/7 16:53 16 branck_another.md
-a---- 2020/2/7 16:52 21 master_branch.md
這時我們刪除一個文件:
❯ rm another.md
starinsun@ASEN ~\Documents\test\git_work\another master ↑2 ~0 -1 ! [18:16] ❯ ls
目錄: C:\Users\starinsun\Documents\test\git_work\another
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2020/2/7 11:44 1714 .gitignore
-a---- 2020/2/7 16:53 16 branck_another.md
-a---- 2020/2/7 16:52 21 master_branch.md
-a---- 2020/2/7 12:00 6 this.md
然後我們使用stash暫存更改:
❯ git stash
Saved working directory and index state WIP on master: ec041b0 Merge branch 'another'
starinsun@ASEN ~\Documents\test\git_work\another master ↑2 [18:16] ❯ ls
目錄: C:\Users\starinsun\Documents\test\git_work\another
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2020/2/7 11:44 1714 .gitignore
-a---- 2020/2/7 18:16 20 another.md
-a---- 2020/2/7 16:53 16 branck_another.md
-a---- 2020/2/7 16:52 21 master_branch.md
-a---- 2020/2/7 12:00 6 this.md
可以看到原本消失的another.md又回來了,這時如果我們使用:
❯ git stash pop
Removing another.md
On branch master
可以看到又回到了暫存前的狀態。
刪除的分支也可以找回
方法很簡單:
git reflog
git checkout c08de9a
git checkout -b branch1