更改父级后的Git更新分支

Posted

技术标签:

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

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

master
    \- A
        \- B

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

    git checkout B && git rebase A 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 的最佳实践,但到目前为止它大部分都有效。除了变基 【参考方案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”。

【讨论】:

以上是关于更改父级后的Git更新分支的主要内容,如果未能解决你的问题,请参考以下文章

将 .eslintrc 重新定位到父级后,ESLint 找不到配置“prettier/@typescript-eslint”

使用 Razor Pages,在用户从下拉列表中选择父级后,如何将相关数据加载到 div?

如何找到最近的 Git 分支的父级

如何找到最近的 Git 分支的父级

reactjs checkboxlist组件 - 更新父级中的状态更改

透明小部件不随其父级移动