在最近使用 git 的過程當中,有時候遇到這樣的一個問題:習慣性的 "add -A",這會將全部的修改都添加到暫存區,但是有兩個文件的修改暫時不想添加的呀,這該怎麼辦?git 提供了一些撤銷操做的方法。好比:css
就像前面說的,習慣性的 "add -A" 將暫時不想添加的修改添加到了暫存區。而取消已經暫存的修改的方法,git 已經在你每次使用 git status
查看文件狀態的時候給出瞭解決方案,git
➜ hexo-theme git:(master) ✗ git status On branch master Your branch is ahead of 'origin/master' by 2 commits. (use "git push" to publish your local commits) Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: processing/README.md modified: processing/layout/_partial/navigation.jade modified: processing/layout/_widget/archive.jade modified: processing/layout/_widget/categories.jade modified: processing/source/css/_base/base.scss modified: processing/source/css/_base/variables.scss modified: processing/source/css/_partial/navigation.scss modified: processing/source/css/style.scss
可使用 git reset HEAD
➜ hexo-theme git:(master) ✗ git reset HEAD * Unstaged changes after reset: M processing/README.md M processing/layout/_partial/navigation.jade M processing/layout/_widget/archive.jade M processing/layout/_widget/categories.jade M processing/source/css/_base/base.scss M processing/source/css/_base/variables.scss M processing/source/css/_partial/navigation.scss M processing/source/css/style.scss
這時再使用 git status
查看文件狀態能夠看到hexo
➜ hexo-theme git:(master) ✗ git status On branch master Your branch is ahead of 'origin/master' by 2 commits. (use "git push" to publish your local commits) Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: processing/README.md modified: processing/layout/_partial/navigation.jade modified: processing/layout/_widget/archive.jade modified: processing/layout/_widget/categories.jade modified: processing/source/css/_base/base.scss modified: processing/source/css/_base/variables.scss modified: processing/source/css/_partial/navigation.scss modified: processing/source/css/style.scss no changes added to commit (use "git add" and/or "git commit -a")
能夠看到,如今全部的修改都沒有被暫存。命令行
有一次,我正修復一個bug,修改本地倉庫的一個文件,尚未完成時,同伴告訴我他已經修改好了,而且已經提交到遠程了。我停下手頭的工做,準備 pull ,這時候意識到,若是直接 pull,merge 的時候必然會衝突,由於我和同事同時修改了同一個文件的差很少相同的地方。可是我本身修改了文件不少地方,一味的 CTRL+Z 也難以解決問題,此時我須要將我修改的文件返回到修改以前的狀態。很湊巧的是,在執行 git status
時,一樣也給出了具體的撤銷方法。code
➜ hexo-theme git:(master) git status On branch master Your branch is up-to-date with 'origin/master'. Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: processing/layout/_widget/archive.jade modified: processing/layout/_widget/categories.jade modified: processing/layout/_widget/tags.jade modified: processing/layout/layout.jade modified: processing/source/css/_base/base.scss no changes added to commit (use "git add" and/or "git commit -a")
使用 git checkout -- <filename>
來取消工做目錄中的修改。jade
➜ hexo-theme git:(master) ✗ git checkout -- * ➜ hexo-theme git:(master) git status On branch master Your branch is up-to-date with 'origin/master'. nothing to commit, working directory clean
效果顯而易見!!這條命令有些危險,全部對文件的修改都沒有了。若是一個不當心將本身須要的修改 discard 了,那就只有哭了……get
有時候在提交時,發現本身漏掉或者多選了幾個文件,亦或者提交信息寫錯了,想要撤銷剛纔的提交操做,可使用 --amend
這個選項,從新提交scss
➜ hexo-theme git:(master) ✗ git add -A ➜ hexo-theme git:(master) ✗ git commit -m "commit wrong" [master ebcbab2] commit wrong 4 files changed, 78 insertions(+), 106 deletions(-) rewrite processing/source/css/_base/base.scss (64%)
發現本身提交了一個 "commit wrong" 的錯誤提交信息,也不用太緊張,輸入指令it
git commit --amend
以後,會跳轉到命令行中的 vim 中,提示你修改提交信息。只要沒有推送到遠程端,一切都好說~