Git School · FluxGit

間違ったブランチにコミットしたときの移動手順

FluxGit ·

各ブロックは別のケースであり、一括実行するスクリプトではありません。自分のリポジトリに合うケースを選び、ブランチ名、パス、VERIFIED_COMMITを置き換えてください。中止コマンドは対応する進行中の操作だけに使い、両方の選択肢を実行しないでください。

要点

間違ったブランチにコミットしたら、まず救出用ブランチで元のコミットを参照します。正しいブランチにcherry-pickし、結果を確認してから元を修正します。未共有の先端ならresetが適する場合がありますが、共有済みなら通常はrevertを選びます。移動先への適用と元の修正は別の判断です。

例と前提条件

ここではmainの先端にある通常のコミット1個を、既存のfeature/fixへ移す例を使います。マージコミットではなく、作業ツリーは変更なしです。ブランチ名は自分のものに置き換えてください。複数コミット、マージ、後続の変更がある場合は、このresetをコピーせず対象範囲を特定します。

変更前に状態を確認する

状態、現在のブランチ、最近のグラフを確認します。件名だけでなくファイルと差分を読み、別の仕事が混ざっていないか確かめます。完全なIDをSCHOOL_MISTAKEに保存すれば、ブランチを切り替えても元を特定できます。mainの修正前に、他の人がその履歴を受け取ったか確認します。

git status --short
git branch --show-current
git log -5 --oneline --decorate
git show --stat HEAD
SCHOOL_MISTAKE=$(git rev-parse HEAD)

参照または別のチェックアウトを保つ

救出用ブランチはコミットされたオブジェクトを到達可能にしますが、未コミットの編集をコピーしません。ローカル変更は、意図したコミット、確認済みstash、外部コピーなどで別途保存し検証します。stashの-uは未追跡ファイルを含みますが無視対象は含みません。reflogにこれらの未保存内容が自動で入るわけではありません。

git branch rescue/wrong-branch "$SCHOOL_MISTAKE"
git show --stat rescue/wrong-branch

最初の手順

移動先へ切り替え、保存したIDをcherry-pickします。親が変わるため、通常は別のIDの新しいコミットができます。差分とプロジェクトに必要なチェックを確認してください。意図した変更が移動先にあり、元への救出参照が残ると確認するまでは、元ブランチから削除しません。

git switch feature/fix
git cherry-pick "$SCHOOL_MISTAKE"
git show --stat HEAD

別の結果を意図して選ぶ

未共有の先端だけを扱う場合、mainに戻りHEADが今もSCHOOL_MISTAKEか確認します。作業ツリーがクリーンで救出参照を残した状態なら、親へのresetで元ブランチから除けます。hard resetは追跡ファイルも置き換えます。mainが進んだ場合や共有済みの場合は、この手順の前提に合いません。

git switch main
git status --short
git rev-parse HEAD
git reset --hard "${SCHOOL_MISTAKE}^"

制限と例外

共有済みブランチでは通常のrevertを優先します。受け取られた履歴を消さず、選んだ変更を打ち消すコミットを追加します。移動先のcherry-pickと元のrevertは別々に確認します。他の場所への統合済みなら共同作業者と調整してください。ここから自動的にforce pushへ進むことはありません。

git switch main
git revert "$SCHOOL_MISTAKE"

競合と後片付け

cherry-pickは競合で止まることがあります。statusを読み、対象ファイルを解決してステージし、続行します。変更や移動先が間違っていたらcherry-pick --abortを使います。revertには別の続行・中止コマンドがあります。中止は進行中の操作を終えるもので、操作外の編集全体のバックアップではありません。

git status
git cherry-pick --abort
git revert --abort

結果を確認する

最終グラフにはfeature/fixの変更とmainの選んだ修正があるはずです。両方の差分と各チェックアウトの状態を確認します。レビュー完了まではrescue/wrong-branchを残してください。状態がクリーンなだけではアプリの動作を保証できないため、影響する動作も検証します。

git log -6 --oneline --decorate --all
git show --stat feature/fix
git status --short

よくある質問

複数コミットなら順序、依存関係、範囲を確認します。reset --softは参照を動かしインデックスとファイルを保ちますが、それだけでは別ブランチへコミットを転送しません。すでにpushした場合は共有履歴のrevertから考え、例外的な書き換えは明示的に合意します。

FluxGitで操作を確認する

FluxGitの履歴と差分の表示で、操作と関連コミットを確認してください。この例のブランチ、共有履歴、ローカルファイルのチェックは維持します。現在利用できるビルドと対応プラットフォームはダウンロードページで確認できます。

Git公式ドキュメント

関連する手順

FluxGitをダウンロード