重學Git(3)

前言

最流行的工作流來啦: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
發佈了386 篇原創文章 · 獲贊 411 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章