Git合并方向错误

7
我已完成从 devel 分支到 master 的一个较长的合并,然后我意识到它应该是一个 devel update,也就是说方向应该是 master -> devel。是否可能更改提交的目标,使箭头指向从 master 到 devel?
注意:对文件的更改结果在 d->mm->d 中完全相同。只是最终目的地(和历史中的箭头)是错误的。
现状:enter image description here;期望:enter image description here
blue: master
red: devel

*变更尚未提交或推送。

概要

  • 我解决了 devel->master 合并中的所有冲突。
  • 我尚未提交或推送这些更改。
  • 更改是在 master 的基础上进行的。
  • 我需要将已解决的冲突应用于 master->devel 方向。
4个回答

7

要撤销分支合并非常简单,只需要确定前一次提交的版本号即可。

首先,切换到你想修改的分支。很重要的一点是:你只能修改当前所在的分支,这是git的黄金法则。

git checkout master

然后,找出之前的主提交并将主分支强制恢复到之前的状态。
git reset --hard <previous-commit-id>

最后,请正确地执行合并操作。
git checkout devel
git merge master

如果您想偷懒,也可以反转分支状态。

您仍然需要找到主分支的先前提交ID。

然后:

git checkout devel
git reset --hard master
git checkout master
git reset --hard <previous-commit-id>

我还没有提交或推送它,但我不想再做冗长的合并(这是一个困难的合并),因为我会完全相同地进行。 - Qwerty
编辑了我的回答 @Qwerty - blue112
哦,你还没有提交你的冲突。在主分支上提交它们,然后按照我帖子中第二部分的步骤进行操作。 - blue112
好的,谢谢,第二部分真的起作用了!!而且我不必再次进行合并。 - Qwerty
@Qwerty:如果你想避免反复修复合并冲突,可以尝试使用git rerere来重用记录的解决方案。 - Hasturkun
显示剩余4条评论

2
实际上比@blue112的最初回答更简单一些。首先在本地提交主分支。
git checkout master
git commit

这将会为主分支和开发分支创建一个共同的提交记录。 然后切换到开发分支并将其合并到主分支中。由于没有冲突,这将导致快进式合并。 "最初的回答"
git checkout devel
git merge master

现在可以放心地推送devel分支了。

原始回答: "最初的回答"
git push devel origin/devel

现在将主分支还原到之前的提交状态,这样它就可以保持合并之前的状态:
git revert HEAD
git checkout master
git reset --hard <previous-commit-id>

现在工作区应该是干净和安全的。


0
我会强制将devel分支设置为当前master的HEAD,然后将master的HEAD重置回一个提交。就像这样:

git checkout master    
git branch -f devel HEAD          # force "devel" to equal current "master"
git branch -u origin/devel devel  # set "devel"'s upstream tracking.
git reset --hard HEAD~1           # set "master" back one commit.

然后如果你喜欢你所看到的...

git checkout devel
git push

0
为了避免丢失任何工作,针对您的实际情况,我会强制devel分支接受当前master分支的HEAD,并将master分支的HEAD重置回上一个提交。操作如下:
git checkout master    
git branch -f devel HEAD          # force "devel" to equal current "master"
git branch -u origin/devel devel  # set "devel"'s upstream tracking.
git reset --hard HEAD~1           # set "master" back one commit.

然后如果你喜欢你看到的...

git checkout devel
git push

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接