時間の制約のために脇に追いやられた、少し時代遅れの実験ブランチがあります。それを手に取って、プロジェクトのHEADに移動する必要があります。
問題は、ブランチ内のパッチが実際にはかなり大きく、衝突が大量に発生することです。ブランチ内のコミットを1つのファイルコミットに分割して、1つずつ簡単に適用できるようにします。
これを行う自動コマンドはありますか、それとも手動で行う必要がありますか?
時間の制約のために脇に追いやられた、少し時代遅れの実験ブランチがあります。それを手に取って、プロジェクトのHEADに移動する必要があります。
問題は、ブランチ内のパッチが実際にはかなり大きく、衝突が大量に発生することです。ブランチ内のコミットを1つのファイルコミットに分割して、1つずつ簡単に適用できるようにします。
これを行う自動コマンドはありますか、それとも手動で行う必要がありますか?
あなたはそれを行うことができます:
git checkout -b experiment master^^^^
git rev-list master^^^..master |
while read rev;
do
git diff --name-only $rev^..$rev |
while read file;
do
git checkout $rev -- $file;
git add $file;
git commit -C $rev;
done;
done
各ステートメントの ^ の数に注意してください
これは、範囲を拡大したいと考えてmaster^^^^..master
おり、それが線形の履歴であるか、マージを失うことを気にしないことを前提としています。また、毎回影響を受けるファイルに対して同じコミット メッセージを保持することも前提としています。
これを実行するためのコマンドが既にあるとは思いませんが、それを実行するためのスクリプトを作成するのはかなり簡単なはずです。変更されたファイルのリストを出力するために使用する必要がgit diff
あり、空の場合は終了します。それ以外の場合は、リストから一番上のファイルを選択し、それをステージングしてgit add
コミットし、繰り返します。