有时候用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。。。