Git 更改父级后更新分支

Git update branch after changing parent

我目前有几个相互依存的分支。我们也在使用 Gerrit。

master
    \- A
        \- B

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

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

问题 1.):

rebase 本身工作正常,但它以某种方式创建了一个带有 A 的 Change-Id 的提交,所以如果我在 rebase 之后推送,更改 A 会得到一个空的补丁集。我想有一次我什至搞砸了一些文件。手动删除该提交是可行的,但还有更好的方法,对吗?

2 有问题。):

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

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

编辑:This helped a lot

在这种情况下,要将 B 变基到 A,您需要将额外的参数传递给 git rebase :

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

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