相比傳統的版本管理工具,git 的 undo 操做也不是很簡單明瞭,本文嘗試總結經常使用的 undo 操做。git
從新提交工具
應該避免考慮不周全的提交,但這太難了。所以Git 專門提供了一個命令來彌補粗心的提交致使的問題。說白了就是讓你從新提交一次。spa
$ git commit --amend
這個命令會從新提交暫存區中的內容。所以你能夠從新考慮哪些文件須要提交,而且把此次提交用的comment準備好。指針
爲了更好的理解這個命令,咱們看看它是怎麼工做的。code
它至關於下面的兩條命令:blog
$ git reset --soft head^ $ git commit -e -F .git/COMMIT_EDITMSG
第一條命令讓頭指針指向上次的提交,而且不改變暫存區和工做區。it
第二條命令是從新提交,而且強制輸入提交說明。class
回滾暫存區中的變動版本管理
咱們但願每次提交都是一個相對完整的總體。因此不少時候是提交全部變動文件中的一部分。im
舉個簡單的例子,當前修改了兩個文件,但願把它們包含到不一樣的提交中。因此問題就來了,咱們習慣了使用
git add -u 或者 git add . 這樣的命令,一不留神就把全部的修改文件添加到了暫存區。
其實git已經很殷勤的告訴咱們該怎麼作了:
$ git reset head begin.txt
好了再用 git status 命令看看,begin.txt 此時已經離開了暫存區。
回滾工做區中的變動
這是一個很危險的操做,由於這真的會丟掉工做區中的變動,而且是找不回來的。在產生這個念頭時,必定要三思!至於具體的操做,Git 也爲咱們提供了詳細的指導:
$ git checkout -- begin.txt
再看看工做區,begin.txt 文件已經被回滾了。