有時候用git提交文件的時候會一塊兒提交了多個文件,可是忽然後悔了,想把其中一個文件撤銷提交,其餘文件不作修改。這個時候該怎麼辦呢?git
我以爲有不少辦法,好比能夠先checkout到上次的提交,而後複製要撤銷修改的文件,而後再checkout到最新的版本,再手動複製粘貼。。這樣至關於手動去舊版本copy了一個文件覆蓋新版本。這樣作其實也不難,可是比較煩。。。目錄多的時候找文件比較麻煩,另外要撤銷的文件多的時候也比較坑爹。。。這個時候其實能夠利用git自帶的功能來完成任務的。ui
cherry-pick用於把另外一個本地分支的commit修改應用到當前分支。this
基本百度這個命令都能獲得這個答案。。。。。blog
可是通過我實驗發現這個命令其實並不止侷限於2個不一樣的分支,即便是同一個分支也是能作到的。rem
因此說咱們的目的怎麼達到呢?在最新的版本上利用cherry -pick 命令去把上次提交的合併到當前版本就OK了。it
如今在版本1提交了2個txt文件,1.txt和2.txtast
修改2個文件之後再提交gui
如今我想把1.txt恢復到上次提交,2.txt不變怎麼辦呢?百度
查看master分支歷史之後,在上個版本上(init)上右鍵選擇cherry -pick this commitim
而後gui會詢問你,這個commit已經在分支上了,是否要繼續。。。
選擇是之後,會提示你有衝突,這和咱們想的同樣,由於上個版本的txt和最新版本的txt確定不同嘛。。。
而後就到了解決衝突的界面。。。
當前local版本是最新的版本,remote的版本是cherry -pick過來的commit版本,因此咱們要還原1.txt的話就在1.txt的正文裏選擇remote的版本,在2.txt裏選擇local的版本
而後再提交此次commit就OK了。。。此次commit至關因而作了一個merge。。。