【问题标题】:Git update branch after changing parent更改父级后的Git更新分支
【发布时间】:2020-11-09 16:49:36
【问题描述】:

我目前有几个基于彼此的分支。我们也在使用 Gerrit。

master
    \- A
        \- B

实际上总共有四个,但要解释我的问题,两个就足够了。我的问题如下: 我已经对 A 进行了更改,并希望在 B 中进行这些更改。我尝试过的:

  1. git checkout B && git rebase A
  2. git checkout B && git merge A

1.) 的问题:

变基本身运行良好,但不知何故,它使用 A 的 Change-Id 创建了一个提交,因此如果我在变基后推送,则更改 A 会得到一个空补丁集。我想有一次我什至整理了一些文件。手动删除该提交是可行的,但有更好的方法,对吧?

2.) 的问题:

合并本身也可以正常工作。但是我不能git commit --amend 更新B,我需要做git commit,这会创建一个新的提交,这是我不想要和不需要的。之后,我需要将旧的提交消息复制到新的提交中。这行得通,但我认为这不是应该的方式吗?

那么,如何从 B 中的 A 获取更新并简单地使用 git commit --amend 更新提交消息,然后将其推送到 gerrit?谢谢!

编辑:This helped a lot

【问题讨论】:

  • 你真的有两个分支还是只有两个基于彼此的开放更改?如果你真的有两个分支,每个分支都有开放的变化吗?
  • @MarceloÁviladeOliveira 有两个分支和两个变化。每次更改我都会保留一个分支。不知道这是否是 Gerrit 的最佳实践,但到目前为止它大部分都有效。除了变基

标签: git merge commit gerrit rebase


【解决方案1】:

在这种情况下,要在 A 上重新定义 B,您需要将额外的参数传递给 git rebase

git rebase --onto A <previous A sha> B

【讨论】:

  • 谢谢,--onto 做到了!虽然我只使用了两个参数
【解决方案2】:

正确的解决方案是选项 1(git checkout B;git rebase A)。我无法想象为什么新提交会收到 A 的 Change-Id。尝试重复该过程以查看您是否能够重现该问题。如果问题再次发生,您只需执行“git commit --amend”,更改 Change-Id(从 A 到 B),然后执行“git push”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-20
    • 2016-04-29
    • 1970-01-01
    • 2014-06-08
    • 1970-01-01
    • 2016-12-20
    • 2019-12-22
    • 2021-09-03
    相关资源
    最近更新 更多