【问题标题】:Changes on feature branch after merge to master合并到 master 后功能分支的更改
【发布时间】:2015-08-27 08:48:52
【问题描述】:

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

经常发生的情况是,一个功能在被推送到 master 之后还需要一些额外的润色。在此期间对 master 所做的更改与功能不冲突,这意味着在功能分支上实现额外工作时,可以将 rebase 变为实际的 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

【问题讨论】:

    标签: git git-flow feature-branch


    【解决方案1】:

    到目前为止我使用的方法:变基到主控并将功能合并回主控

    我认为您可能对变基的目的有些困惑。如果您在将功能分支合并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,您将 合并它。在做 rebase 之后将 feature 合并到 master 是没有意义的,并且违背了 rebase 的目的,即保持线性。

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

    【讨论】:

    • 不确定push 是什么意思。从上下文中我猜它是fast forward merge?
    • 在做 rebase 之后,你会将 git push 的功能转换为 master。这不是一个真正的正常合并,因为合并只留下一次提交,而快速转发 master 可能会给你留下 许多 来自功能分支的提交。
    • 无论如何,我真正看到的唯一两个选项是让您基于 master 和快进 master 重新设置功能,简单地合并新提交从功能到master
    • 我似乎无法遵循您的术语。如果您愿意,请使用给定的示例 repo 提供答案以进行可视化,这样您的意思会更清楚。
    • 我发现我的答案比原来的问题更清楚。我不确定该功能是如何最终被主人污染的。如果你想转为聊天,我很乐意这样做。
    猜你喜欢
    • 2018-03-08
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    相关资源
    最近更新 更多