合并到主分支后的特性分支更改

3
我希望能够在将功能分支合并到主分支后引入更改的方法。目标是使功能分支只包含与其相关的提交。
通常情况下,功能在推送到主分支后需要进行一些额外的修饰。此期间对主分支所做的更改与该功能没有冲突,这意味着在功能分支上实施附加工作时可以基于实际的主分支进行变基。
下面的图片展示了这种情况:

enter image description here

我迄今所使用的方法是:将分支变基到主分支,然后将功能合并回主分支。

enter image description here

Against -> 功能分支现在被主分支的部分污染了。

enter image description here

问题: 在实践中,你采取了哪些方法来解决这个问题?

示例代码

为了帮助描述下面的方法,以下是创建存储库结构的示例代码。

# mkdir test
git init 
touch master-change-file
git add master-change-file
git commit -m "initial commit"
echo 1 > master-change-file
git commit -a -m "master commit 1" 
echo 2 > master-change-file
git commit -a -m "master commit 2" 
git checkout -b feature
echo 3 > feature-change-file
git add feature-change-file
git commit -a -m "feature commit 1"
echo 4 > feature-change-file
git commit -a -m "feature commit 2"
echo 5 > feature-change-file
git commit -a -m "feature commit 3"
git checkout master 
git merge --no-ff feature -m "Merge branch 'feature'"
git checkout feature 
echo 6 > feature-change-file
git commit -a -m "feature commit 4"
echo 7 > feature-change-file
git commit -a -m "feature commit 5"
git checkout master 
echo 8 > master-change-file
git commit -a -m "master commit 3"
echo 9 > master-change-file
git commit -a -m "master commit 3"
# gitk --all
1个回答

3
我迄今为止使用的方法:将分支变基到主干,然后将功能合并回主干。
我认为您可能对变基的目的有些困惑。如果您在将特性分支合并到master后进行了新的提交,并且您也想将这些新更改带入master中,则变基是一种选项。请考虑以下图表:
master:  A <- B <- C <- D
feature: A <- B <- C <- E <- F

如果你要这样做:

git checkout feature
git rebase master

那么你将得到以下内容:
master:  A <- B <- C <- D
feature: A <- B <- C <- D <- E' <- F'

在这一点上,你只需将 feature 分支推送到 master 中,不需要合并它。在重新定位后将 feature 合并到 master 是毫无意义的,并且违背了重新定位的目的,即保持线性。
最后,这里是你问题的答案。你基本上有两种选择来处理这些具有新更改功能的分支。你可以合并,也可以重新定位。你可以选择是否保留在功能分支中进行的原始提交。

我不确定你所说的“push”是什么意思。从上下文来看,我猜它可能是“快速合并”? - TheMeaningfulEngineer
完成变基后,您将使用 git push 将功能推送到 master。这不是真正的普通合并,因为合并会让您留下一个提交,而快进 master 可能会让您从功能分支中留下 许多 提交。 - Tim Biegeleisen
无论如何,我真正看到的两个选项是让你在master上重新定位功能并快进master,或者只是将来自功能的新提交合并到master中。 - Tim Biegeleisen
我似乎无法理解你的术语。如果方便的话,请使用给定的示例存储库进行可视化,这样会更清楚你的意思。 - TheMeaningfulEngineer
我觉得我的回答比原问题更清晰。我不确定这个功能是如何被主分支污染的。如果你想转到聊天,我很愿意。 - Tim Biegeleisen
想要转移到聊天,但从未这样做过,似乎只有在我们污染(:p)评论部分时才会弹出。 - TheMeaningfulEngineer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接