以以下案例为例:
我在一个主题分支中有一些工作,现在我准备合并回master:
* eb3b733 3 [master] [origin/master]
| * b62cae6 2 [topic]
|/
* 38abeae 1
我从master执行合并,解决冲突,现在我有:
* 8101fe3 Merge branch 'topic' [master]
|\
| * b62cae6 2 [topic]
* | eb3b733 3 [origin/master]
|/
* 38abeae 1
现在,合并花了我一些时间,所以我又执行了一次抓取,并注意到远程主分支有了新的更改:
* 8101fe3 Merge branch 'topic' [master]
|\
| * b62cae6 2 [topic]
| | * e7affba 4 [origin/master]
| |/
|/|
* | eb3b733 3
|/
* 38abeae 1
如果我尝试从master执行git rebase origin/master
,我将被迫再次解决所有冲突,并且还会丢失合并提交:
* d4de423 2 [master]
* e7affba 4 [origin/master]
* eb3b733 3
| * b62cae6 2 [topic]
|/
* 38abeae 1
有没有一种干净的方法来改变合并提交的基数,这样我就可以得到像下面这样的历史记录了?
* 51984c7 Merge branch 'topic' [master]
|\
| * b62cae6 2 [topic]
* | e7affba 4 [origin/master]
* | eb3b733 3
|/
* 38abeae 1
发布于 2017-12-15 00:47:32
考虑到我刚刚花了一天的时间试图解决这个问题,实际上在同事的帮助下找到了一个解决方案,我想我应该加入进来。
我们有一个很大的代码库,我们必须同时处理2个严重修改的分支。有一个主分支和一个辅助分支,如果你是哪个分支。
虽然我将辅助分支合并到主分支中,但主分支中的工作仍在继续,当我完成时,我无法推送我的更改,因为它们是不兼容的。
因此,我需要“改变”我的“合并”的基础。
这是我们最终是如何做到的:
1)记录SHA。示例: c4a924d458ea0629c0d694f1b9e9576a3ecf506b
git log -1
2)创建正确的历史记录,但这会破坏合并。
git rebase -s ours --preserve-merges origin/master
3)记下SHA。示例: 29dd8101d78
git log -1
4)现在重置到您之前所在的位置
git reset c4a924d458ea0629c0d694f1b9e9576a3ecf506b --hard
5)现在将当前的master合并到您的工作分支中
git merge origin/master
git mergetool
git commit -m"correct files
6)现在你有了正确的文件,但是错误的历史记录,使用以下命令在您的更改之上获得正确的历史记录:
git reset 29dd8101d78 --soft
7)然后--修改原始合并提交中的结果
git commit --amend
瞧!
发布于 2011-01-25 02:10:58
看起来你想要做的是删除你的第一个合并。您可以按照以下步骤操作:
git checkout master # Let's make sure we are on master branch
git reset --hard master~ # Let's get back to master before the merge
git pull # or git merge remote/master
git merge topic
那会给你你想要的。
https://stackoverflow.com/questions/4783599
复制相似问题