有時候用git提交文件的時候會一起提交了多個文件,但是突然后悔了,想把其中一個文件撤銷提交,其他文件不做修改。這個時候該怎么辦呢?
我覺得有很多辦法,比如可以先checkout到上次的提交,然后復制要撤銷修改的文件,然后再checkout到最新的版本,再手動復制粘貼。。這樣相當於手動去舊版本copy了一個文件覆蓋新版本。這樣做其實也不難,但是比較煩。。。目錄多的時候找文件比較麻煩,另外要撤銷的文件多的時候也比較坑爹。。。這個時候其實可以利用git自帶的功能來完成任務的。
Cherry -pick
cherry-pick用於把另一個本地分支的commit修改應用到當前分支。
基本百度這個命令都能得到這個答案。。。。。
但是經過我實驗發現這個命令其實並不止局限於2個不同的分支,即使是同一個分支也是能做到的。
所以說我們的目的怎么達到呢?在最新的版本上利用cherry -pick 命令去把上次提交的合並到當前版本就OK了。
舉栗子~
現在在版本1提交了2個txt文件,1.txt和2.txt
修改2個文件以后再提交
現在我想把1.txt恢復到上次提交,2.txt不變怎么辦呢?
查看master分支歷史以后,在上個版本上(init)上右鍵選擇cherry -pick this commit
然后gui會詢問你,這個commit已經在分支上了,是否要繼續。。。
選擇是以后,會提示你有沖突,這和我們想的一樣,因為上個版本的txt和最新版本的txt肯定不一樣嘛。。。
然后就到了解決沖突的界面。。。
當前local版本是最新的版本,remote的版本是cherry -pick過來的commit版本,所以我們要還原1.txt的話就在1.txt的正文里選擇remote的版本,在2.txt里選擇local的版本
然后再提交這次commit就OK了。。。這次commit相當於是做了一個merge。。。