这是我在工作中经常处理的工作流程。
git checkout -b feature_branch
# Do some development
git add .
git commit
git push origin feature_branch
此时,我的同事对特性分支进行了审查,但我想继续开发其他依赖于feature_branch
. 所以feature_branch
在审核中...
git checkout feature_branch
git checkout -b dependent_branch
# Do some more development
git add .
git commit
现在我针对 feature_branch 上的代码审查做了一些更改
git checkout feature_branch
# Do review fixes
git add .
git commit
git checkout dependent_branch
git merge feature_branch
现在这是我们遇到问题的地方。我们对 master 有一个压缩策略,这意味着合并到 master 中的功能分支必须压缩到单个提交中。
git checkout feature_branch
git log # Look for hash at beginning of branch
git rebase -i first_hash_of_branch # Squash feature_branch into a single commit
git merge master
一切都很酷,除了dependent_branch
. 当我尝试将依赖分支重新定位到 master 或尝试将 master 合并到其中时,git 对重写/压缩的历史感到困惑,并且基本上将每个更改标记depedendent_branch
为冲突。这是一个 PITA,基本上是重新做或消除dependent_branch
. 有什么解决办法吗?有时,我会手动创建一个补丁并将其应用到 master 的新分支上,但如果与它有任何真正的冲突,修复起来会更糟糕。
git checkout dependent_branch
git diff > ~/Desktop/dependent_branch.diff
git checkout master
git checkout -b new_dependent_branch
patch -p1 < ~/Desktop/dependent_branch.diff
# Pray for a clean apply.
有任何想法吗?我知道这是因为在壁球期间重写了历史,但这是我无法改变的要求。什么是最好的解决方案/解决方法?有什么我可以做的魔法吗?或者是否有更快的方法来完成手动创建差异所涉及的所有步骤?