我已经完成了开发分支到主的冗长合并,然后我意识到它应该是开发更新,意思是方向应该是 master - > devel的即可。是否可以更改目的地 提交,以便箭头从主控指向开发?
注意:d->m
和m->d
文件中的结果更改完全相同。它只是最终目的地(和历史中的箭头)是错误的。
blue: master
red: devel
*未提交或推送更改。
- 我解决了 devel->主合并中的所有冲突。
- 我没有 提交或推动更改。
- 在主人之上进行更改。
- 我 需要在 master-> devel 方向上应用已解决的冲突。
答案 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