更改父级后的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?