Git undo 操作

sparkdev發表於2016-08-21

相比傳統的版本管理工具,git 的 undo 操作也不是很簡單明瞭,本文嘗試總結常用的 undo 操作。

重新提交

應該避免考慮不周全的提交,但這太難了。因此Git 專門提供了一個命令來彌補粗心的提交導致的問題。說白了就是讓你重新提交一次。

$ git commit --amend

這個命令會重新提交暫存區中的內容。因此你可以重新考慮哪些檔案需要提交,並且把這次提交用的comment準備好。

 

為了更好的理解這個命令,我們看看它是怎麼工作的。

它相當於下面的兩條命令:

$ git reset --soft head^
$ git commit -e -F .git/COMMIT_EDITMSG

第一條命令讓頭指標指向上次的提交,並且不改變暫存區和工作區。

第二條命令是重新提交,並且強制輸入提交說明。

回滾暫存區中的變更

我們希望每次提交都是一個相對完整的整體。所以很多時候是提交所有變更檔案中的一部分。

舉個簡單的例子,當前修改了兩個檔案,希望把它們包含到不同的提交中。所以問題就來了,我們習慣了使用

git add -u 或者 git add . 這樣的命令,一不留神就把所有的修改檔案新增到了暫存區。

其實git已經很殷勤的告訴我們該怎麼做了:

$ git reset head begin.txt

好了再用 git status 命令看看,begin.txt 此時已經離開了暫存區。

回滾工作區中的變更

這是一個很危險的操作,因為這真的會丟掉工作區中的變更,並且是找不回來的。在產生這個念頭時,一定要三思!至於具體的操作,Git 也為我們提供了詳細的指導:

$ git checkout -- begin.txt

再看看工作區,begin.txt 檔案已經被回滾了。