Git合并错误的方向

时间:2015-07-28 09:08:25

标签: git merge

我已经完成了开发分支到的冗长合并,然后我意识到它应该是开发更新,意思是方向应该是 master - > devel的即可。是否可以更改目的地 提交,以便箭头从主控指向开发?

注意:d->mm->d文件中的结果更改完全相同。它只是最终目的地(和历史中的箭头)是错误的。

现在:enter image description here期望:enter image description here

blue: master
red: devel

*未提交或推送更改。

重演

  
      
  • 我解决了 devel->主合并中的所有冲突。
  •   
  • 我没有   提交或推动更改。
  •   
  • 在主人之上进行更改。
  •   
  • 我   需要在 master-> devel 方向上应用已解决的冲突。
  •   

4 个答案:

答案 0 :(得分:6)

恢复分支上的合并就像确定哪个提交是前一个提交一样简单。

首先,检查要修改的分支。 这是一个git-golden-rule:你只能修改你所依赖的分支。

git checkout master

然后,弄清楚之前的主提交它,并强制主人回到以前的状态

git reset --hard <previous-commit-id>

最后,合并你的合并

git checkout devel
git merge master

如果你想要懒惰,你还可以做的是反转分支状态。

您仍然需要找到master之前的commit-id。

然后:

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

答案 1 :(得分:1)

它实际上比@ blue112的anwser简单一些。 首先在本地提交master。

git checkout master
git commit

这将为master和devel创建一个共享的提交。 然后切换到devel并将其与master合并。由于没有任何冲突,这将导致快速合并。

git checkout devel
git merge master

现在应该保存以进行开发。

git push devel origin/devel

现在将master恢复为先前的提交,因此它保持合并之前的状态:

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

工作区现在应该干净安全了。

答案 2 :(得分: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

答案 3 :(得分: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