还原合并所做的更改

Sfi*_*oza 28 git revert

开发人员对两个文件进行了小的更改.但在这次提交期间,他发生了合并冲突,删除了很多东西(可能没有最新的版本).然后它被推送到共享仓库,其他一些开发人员做了一些其他的提交.

现在,我们注意到,合并删除了重要文件,我们希望将其还原.
如何在不丢失下一次提交的更改的情况下执行此操作?

我试图git revert commitsha,但它没有带来改变.我需要还原mergesha吗?我怎样才能确定它?

Sri*_*bat 41

git revert --mainline

通常:

git revert --mainline 1 dd8cbe3e4
Run Code Online (Sandbox Code Playgroud)

哪里:

  • dd8cbe3e4 是要撤消的错误合并提交,以及
  • --mainline 告诉你多个先前提交中的哪一个是要恢复的(请记住,合并提交有多个父提交,你只能保留其中一个).
    • 我找不到一个很好的解释是什么1意思,但我的猜测是1,2,3...对应于之前提交的映射列表dd8cbe3e4,按升序时间顺序排序(最早的第一个 - 通常是你想要恢复的).

资源:

http://thezencoder.com/2013/09/05/how-to-correctly-revert-a-bad-merge-in-git/

  • 我相信你关于主线的陈述是正确的 - docs:https://git-scm.com/docs/git-revert#git-revert--mparent-number (2认同)

seh*_*ehe 9

简而言之,警告:除了在合并之前将分支实际重置为提交之外,没有真正安全的撤消合并的方法.

现在让我解释一下现有的参考资料.

引用链接的答案如何恢复错误的git合并提交

基本上,恢复合并将撤消数据更改,但不会撤消历史(图形)更改.因此,预计恢复错误的合并不会做任何事情.

当然,重置分支将是最简单的方法,但如果合并的结果已被推送到共享仓库(因为您有效地重写已发布的历史记录),则它具有缺点.

这是故障

  • 重置而不是恢复的问题在于,如果您已经推动了错误的合并,而其他人已经取消了它,那么他们的生活就会变得复杂。一旦你推送,你通常应该创建补偿性的新提交而不是删除提交。 (2认同)

Aar*_*lla 6

另一种(更安全的)方法是在文件的最后一个版本和当前版本之间创建差异,然后通过复制和粘贴来恢复丢失的部分.

这总是有效,不需要任何奇怪的命令行选项,它不会篡改你应该留下的东西:-)

例如,Eclipse有很好的工具来挑选每个个体差异并将其复制到任一版本.只需使用"比较"菜单并排打开两个版本.