壁球合并后的重新定位?

mus*_*ard 12 git git-rebase

我有一个'主'分支和几个主题分支.假设主分支主要用作发布候选者,并且在该分支上不进行任何开发工作.

主题分支是多个,由团队共享.一些分支机构有多个开发人员在开发它们.所有主题分支都定期从主分支重新定位.

为了清理'master'分支中的历史记录,我在将代码从主题分支到主分支时进行了'git merge --squash'.这非常好.

现在 - 当主题分支被重新定位时 - 提交正在重复.有没有办法在'git merge --squash'成功后清理主题分支上的提交?

ral*_*nja 9

让我们假设您有以下情况:

A - B - C (master)
 \
  D - E (topic)
Run Code Online (Sandbox Code Playgroud)

如果你使用--squash将主题合并到master中,你会得到类似的东西

A - B - C - F (master)
 \
  D - E (topic)
Run Code Online (Sandbox Code Playgroud)

其中F包含来自D和E的所有更改.由于主题分支已经在主(通过F),因此在master上重新讨论主题没有意义.您可以将主题分支移动到F,而不是重新定位

git checkout master
git branch -f topic F
Run Code Online (Sandbox Code Playgroud)

产量:

A - B - C - F (master/topic)
Run Code Online (Sandbox Code Playgroud)

您现在需要做的就是推动移动的主题分支:

git push -f origin topic
Run Code Online (Sandbox Code Playgroud)

  • 我不明白。如果“topic”上有“D - E - G”,其中“F”仅包含“D - E”的更改,该怎么办?上面会删除‘G’吗?这对我来说是最常见的场景 - 我创建一个 PR“x”,然后需要在另一个“y”中对该 PR 进行更改,因此我分支“x”,然后将“x”压缩合并到“master”。如何协调“y”与“master”? (3认同)