首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >重新设置Git合并提交的基础

重新设置Git合并提交的基础
EN

Stack Overflow用户
提问于 2011-01-24 23:15:12
回答 2查看 126.2K关注 0票数 221

以以下案例为例:

我在一个主题分支中有一些工作,现在我准备合并回master:

代码语言:javascript
复制
* eb3b733 3     [master] [origin/master]
| * b62cae6 2   [topic]
|/  
* 38abeae 1

我从master执行合并,解决冲突,现在我有:

代码语言:javascript
复制
*   8101fe3 Merge branch 'topic'  [master]
|\  
| * b62cae6 2                     [topic]
* | eb3b733 3                     [origin/master]
|/  
* 38abeae 1

现在,合并花了我一些时间,所以我又执行了一次抓取,并注意到远程主分支有了新的更改:

代码语言:javascript
复制
*   8101fe3 Merge branch 'topic'  [master]
|\  
| * b62cae6 2                     [topic]
| | * e7affba 4                   [origin/master]
| |/  
|/|   
* | eb3b733 3
|/  
* 38abeae 1

如果我尝试从master执行git rebase origin/master,我将被迫再次解决所有冲突,并且还会丢失合并提交:

代码语言:javascript
复制
* d4de423 2       [master]
* e7affba 4       [origin/master]
* eb3b733 3
| * b62cae6 2     [topic]
|/  
* 38abeae 1

有没有一种干净的方法来改变合并提交的基数,这样我就可以得到像下面这样的历史记录了?

代码语言:javascript
复制
*   51984c7 Merge branch 'topic'  [master]
|\  
| * b62cae6 2                     [topic]
* | e7affba 4                     [origin/master]
* | eb3b733 3
|/  
* 38abeae 1
EN

回答 2

Stack Overflow用户

发布于 2017-12-15 00:47:32

考虑到我刚刚花了一天的时间试图解决这个问题,实际上在同事的帮助下找到了一个解决方案,我想我应该加入进来。

我们有一个很大的代码库,我们必须同时处理2个严重修改的分支。有一个主分支和一个辅助分支,如果你是哪个分支。

虽然我将辅助分支合并到主分支中,但主分支中的工作仍在继续,当我完成时,我无法推送我的更改,因为它们是不兼容的。

因此,我需要“改变”我的“合并”的基础。

这是我们最终是如何做到的:

1)记录SHA。示例: c4a924d458ea0629c0d694f1b9e9576a3ecf506b

代码语言:javascript
复制
git log -1

2)创建正确的历史记录,但这会破坏合并。

代码语言:javascript
复制
git rebase -s ours --preserve-merges origin/master

3)记下SHA。示例: 29dd8101d78

代码语言:javascript
复制
git log -1

4)现在重置到您之前所在的位置

代码语言:javascript
复制
git reset c4a924d458ea0629c0d694f1b9e9576a3ecf506b --hard

5)现在将当前的master合并到您的工作分支中

代码语言:javascript
复制
git merge origin/master
git mergetool
git commit -m"correct files

6)现在你有了正确的文件,但是错误的历史记录,使用以下命令在您的更改之上获得正确的历史记录:

代码语言:javascript
复制
git reset 29dd8101d78 --soft

7)然后--修改原始合并提交中的结果

代码语言:javascript
复制
git commit --amend

瞧!

票数 7
EN

Stack Overflow用户

发布于 2011-01-25 02:10:58

看起来你想要做的是删除你的第一个合并。您可以按照以下步骤操作:

代码语言:javascript
复制
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

那会给你你想要的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4783599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档