これは、私が仕事でよく扱うワークフローです。
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
。依存ブランチを master にリベースするか、master をマージしようとすると、git は書き換え/押しつぶされた履歴によって混乱し、基本的にすべての変更をdepedendent_branch
競合としてマークします。のすべての変更を実行し、基本的にやり直すか、競合を解消するのは PITAdependent_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.
何か案は?スカッシュ中に履歴が書き換えられたためにこれが発生することはわかっていますが、これは変更できない要件です。最善の解決策/回避策は何ですか? 私にできる魔法はありますか?または、差分を手動で作成することに関連するすべての手順を実行するより高速な方法はありますか?