首页 新闻 会员 周边 捐助

git 如何撤销merge操作

0
悬赏园豆:5 [已解决问题] 解决于 2016-01-22 09:50
由于merge操作后,产生大量冲突,因此需要撤销merge操作,请问如何操作?
git
jackccc的主页 jackccc | 小虾三级 | 园豆:1341
提问于:2016-01-22 09:27
< >
分享
最佳答案
0

撤销类命令 
如果是单个文件 
1.use "git reset HEAD <file>..." to unstage 
如果已经用add 命令把文件加入stage了,就先需要从stage中撤销

然后再从工作区撤销 
2.use "git checkout -- <file>..." to discard changes in working directory

git checkout a.txt  撤销a.txt的变动(工作区上的文件) 
如果是多个文件 
git chenkout .

如果已经commit 了,则需要 
git commit --amend 来修改,这个只能修改最近上一次的,也就是用一个新的提交来覆盖上一次的提交。因此如果push以后再做这个动作就会有危险

$ git reset --hard HEAD 放弃工作区和index的改动,HEAD指针仍然指向当前的commit.

这条命令同时还可以用来撤销还没commit的merge,其实原理就是放弃index和工作区的改动,因为没commit的改动只存在于index和工作区中。

$ git reset --hard HEAD^ 用来撤销已经commit的内容(等价于 git reset --hard HEAD~1) 。原理就是放弃工作区和index的改动,同时HEAD指针指向前一个commit对象。

git revert 也是撤销命令,区别在于reset是指向原地或者向前移动指针,git revert是创建一个commit来覆盖当前的commit,指针向后移动

 

Merge类命令

在冲突状态下,需要解决冲突的文件会从index打回到工作区。

1.用工具或者手工解决冲突 
2.git add 命令来表明冲突已经解决。 
3.再次commit 已解决冲突的文件。

$ git reset --hard ORIG_HEAD 用来撤销已经commit 的merge. 
$ git reset --hard HEAD 用来撤销还没commit 的merge,其实原理就是放弃index和工作区的改动。

git reset --merge ORIG_HEAD,注意其中的--hard 换成了 --merge,这样就可以避免在回滚时清除working tree。

收获园豆:5
Ctrl` | 老鸟四级 |园豆:3317 | 2016-01-22 09:46
其他回答(1)
0

代码冲突了,你得自己去文件了改呀,他会有提示,它会标注出你与版本库的不同,你自己决定用哪个,把不要的删掉,

然后重新添加提交推送

默然沉醉 | 园豆:372 (菜鸟二级) | 2016-01-22 09:45

30多个文件冲突,已经找到怎么撤销了,谢谢。

支持(0) 反对(0) jackccc | 园豆:1341 (小虾三级) | 2016-01-22 09:46
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册