这是我通常在工作中处理的工作流程。
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合并到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.
有任何想法吗?我知道发生这种情况是由于壁球期间的重写历史记录,但这是我不能更改的要求。最好的解决方案/解决方法是什么?我能做些魔术吗?还是有更快的方法来完成与手动创建差异有关的所有步骤?
git add .
是完全邪恶的,最终在您犯下您本来不想做的事情时最终会咬住您。您应该使用git add -p
或至少使用git add -u .