相比傳統的版本管理工具,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 檔案已經被回滾了。