3

我正在寻找一种将更改合并到主分支后将更改引入功能分支的方法。目标是保持功能分支只包含与其相关的提交。

经常发生的情况是,一个特性在被推送到 master 之后还需要一些额外的打磨。在此期间对 master 所做的更改与功能不冲突,这意味着在功能分支上实现附加工作时,可以将 rebase 变为实际的 master。

下图显示了这种情况:

在此处输入图像描述

到目前为止我使用的方法:Rebase to master and merge feature back to master

在此处输入图像描述

反对 -> 功能分支现在被 master 的部分污染了。

在此处输入图像描述

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

示例代码

为了帮助描述下面的方法,是从示例中创建 repo 结构的代码。

# 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
4

1 回答 1

3

到目前为止我使用的方法:Rebase to master and merge feature back to master

我想你可能对变基的目的有点困惑。如果您在将功能分支合并到之后对功能分支进行了新提交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'

此时,您只需将分支送到中,您不会合并它。在进行变基后合并是没有意义的,并且违背了变基的目的,即保持线性。featuremasterfeaturemaster

最后,这是您问题的答案。你基本上有两种选择来处理这些有新变化的特性分支。您可以合并,也可以变基。您是否希望保留在功能分支中发生的原始提交取决于您。

于 2015-08-27T08:56:50.927 回答