这是我在工作中经常处理的工作流程。
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
现在问题来了。我们的主分支有一个压缩提交的策略,这意味着合并到主分支的特性分支必须被压缩为单个提交。
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
,一切都很好。当我尝试将dependent_branch
变基到主分支或者尝试将主分支合并到它时,由于重写/压缩的历史记录,Git会对dependent_branch
中的每个更改都标记为冲突,导致混乱。必须逐个处理dependent_branch
中的所有更改以重新排列或解决冲突,非常麻烦。有没有什么解决方法?有时,我会手动创建一个补丁,并在主版本的新分支上应用它,但如果存在任何真正的冲突,则更难修复。
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 .
. - user229044