【问题标题】:How to rebase a merge but keep the merge commit如何重新合并合并但保留合并提交
【发布时间】:2015-11-13 12:34:19
【问题描述】:

我和我的团队正在使用远离主轨道 (origin/dev) 的远程分支 (origin/our_feature_branch) 开发一项功能。 Gerrit 用于审查等。

使用git merge origin/dev 提升远程分支,然后修复冲突、提交和git push origin HEAD:refs/for/our_feature_branch

Gerrit 强制执行一条规则,即一次只能推送一个提交。我对此无能为力。

假设我开始努力提升:

git fetch
git checkout -b uplift origin/our_feature_branch
git merge origin/dev

但是在这里我在修复一些冲突时遇到了困难,并且回归测试需要一些时间才能运行,并且一些团队成员向 Gerrit 中的功能分支提交了另一个提交。此提交现在位于我“持续”提升的基础提交之上。

我现在该怎么办?

如果我在功能分支上重新设置我的合并提交,我将删除合并并添加从 origin/dev 合并的所有提交在它上面 - 这不是一个选项。如果我与功能分支合并,我最终会在合并时合并,我最终将不得不向 Gerrit 推送两个提交 - 也是不允许的。

是否有解决方案,或者我是否必须重新进行合并并尽量记住在下次我开始进行提升时告诉大家我们有一个交货停止?

【问题讨论】:

  • 您是否尝试过使用 git rebase -p 将合并提交重新基于新提交?
  • 阅读文档,-p 看起来很有希望。星期一回到办公室时,我会试试看,谢谢!
  • 警告:从 Git 2.18(2018 年第二季度,5 年后)开始,git --rebase-merges 最终将取代旧的git --preserve-merges。见What exactly does Git's “rebase --preserve-merges” do (and why?)

标签: git version-control git-merge git-rebase


【解决方案1】:

按照 cmets 的建议,git rebase -p 解决了这个问题

开始创建提升提交:

git fetch
git checkout -b uplift origin/our_feature_branch
git merge origin/dev
git commit

有些东西被提交给 Gerrit 中的origin/our_feature_branch

执行以下操作以 rebase 合并提交并保持合并:

git fetch
git rebase -p origin/our_feature_branch

现在可以将合并提交推送到 Gerrit,它将基于 origin/our_feature_branchgit rebase -p 之前的 origin/dev 上的最新版本

【讨论】:

    猜你喜欢
    • 2021-12-23
    • 2015-04-17
    • 2011-03-28
    • 2019-11-15
    • 1970-01-01
    • 2013-10-11
    • 2010-12-10
    • 1970-01-01
    • 2020-10-04
    相关资源
    最近更新 更多