一般的な使用シナリオ:
master、branch_foo、branch_bar があります。すべて最新です。現在、「git checkout master」を実行し、バグ修正に取り組んでいます。
すべてのブランチで同じ状態にある追跡ファイルに修正があったとしましょう。修正前は、各ブランチからのファイルの差分は違いがありません。
この修正をすべてのブランチにコミットする方法はありますか?
一般的な使用シナリオ:
master、branch_foo、branch_bar があります。すべて最新です。現在、「git checkout master」を実行し、バグ修正に取り組んでいます。
すべてのブランチで同じ状態にある追跡ファイルに修正があったとしましょう。修正前は、各ブランチからのファイルの差分は違いがありません。
この修正をすべてのブランチにコミットする方法はありますか?
これに対する一般的なアプローチは、「上方へのマージ」です。からman gitworkflows
:
修正を必要とする、サポートされている最も古いブランチに常に修正をコミットしてください。次に、(定期的に) 統合ブランチを上向きにマージします。
これにより、非常に制御された修正の流れが得られます。maint にも必要な修正を master などに適用したことに気付いた場合は、それを (git-cherry-pick(1) を使用して) 下向きにチェリーピックする必要があります。これは数回発生しますが、頻繁に行わない限り心配する必要はありません。
もちろん、最初の方法が推奨されます。リポジトリに一度だけコミットし、各ブランチにどのように到達したかの履歴を確認できるのは良いことです。しかし、人生は完璧ではなく、2 番目のカテゴリーに陥ることがあります。その状況が十分に一般的になった場合、おそらく次のようなスクリプトを書くことができます
multi-cherry-pick <commit> <branch> [<branch>...]
各ブランチを順番にチェックアウトし、指定されたコミットをチェリーピックします。
私はあなたが望むものを期待しgit cherry-pick
ています。
修正を最初のブランチにコミットした後、 を使用git cherry-pick
してそれを他の各ブランチにマージできます。
SO に関するこの関連する質問は興味深いかもしれません: Git & 複数のブランチでの作業
はいあります。別のトピック (機能) ブランチ(最も古いブランチ/最も古い状態から分岐)でこのコミットを行い、このトピック ブランチを任意のブランチにマージします。
このワークフローは、たとえば、Junio C Hamano (Git のメンテナー) によるブログ投稿、 Never merging backで説明されています。
Jefromiが書いたのは大体こんな感じ