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