コンテンツにスキップ
GitTree

Git ガイド

GUI での Git インタラクティブなリベース: コミットのスカッシュ、修正、リワード、並べ替え、ドロップ

インタラクティブなリベース GUI を使用してコミットを潰し、修正し、書き直し、並べ替え、削除する方法、git rebase -i での各アクションの動作、および失敗したリベースを元に戻す方法。

作者 Kodmora更新されました 3 分で読みました
GitTree ピック、スカッシュ、リワードのステップを備えたインタラクティブなリベース エディター

インタラクティブなリベース GUI を使用すると、テキスト ファイルではなくリストからブランチ上のコミットを書き換えることができます。開始コミットを選択し、その上のすべてのコミットにアクション (選択、スカッシュ、修正、リワード、編集、またはドロップ) を与え、それらを新しい順序にドラッグして、Git に再実行させます。 git rebase -i と同じ操作を実行するため、結果はコマンド ラインと同じになります。 GitTree で、変更するコミットのすぐ下のコミットを右クリックし、上記のコミットの対話型リベース… を選択し、アクションを設定して、Start Rebase をクリックします。結果が間違っている場合は、「元に戻す」によってブランチが元に戻ります。

このインタラクティブなリベース チュートリアルでは、各アクション、コミットをスカッシュする 3 つの方法、一致するコマンド、オートスカッシュ、セーフティ ネットについて説明します。スクリーンショットには、macOS、Windows、および Linux の Git クライアントである GitTree の対話型リベース エディター が示されていますが、Git の動作はどのツールでも同じです。

Git インタラクティブ リベースの機能とそれをいつ使用するか

通常のリベースでは、一連のコミットが新しいベースに移動されます。インタラクティブなリベースを使用すると、そのシリーズを途中で編集することもできます。Git は再生しようとしているコミットを表示し、リストを変更すると、Git は一致するブランチを再構築します。書き換えられたコミットはすべて新しい ID を取得するため、対話型リベースは作業を共有する前の段階に属します。それに手を伸ばす一般的な理由は次のとおりです。

  • プル リクエストを開く前に、一連の「wip」、「fix typo」、「address review」コミットを 1 つの意味のあるコミットにまとめます。
  • タイプミス、チケット番号の欠落、または曖昧な概要のあるコミット メッセージを書き換えます。
  • 忘れられた変更をそれが属するコミットにフォールドすることで、すべてのコミットが独自にビルドされます。
  • リファクタリングが依存する機能の前に配置されるようにコミットを並べ替えます。
  • メイン ブランチに到達すべきではないデバッグ コミットまたは実験を削除します。

ピック、スカッシュ、フィックスアップ、リワード、編集、ドロップ: リベース アクションの説明

対話型リベース プランの各行は、1 つのコミットと 1 つのアクションで構成されます。これらは日常的に使用するものです (Git の todo ファイルには、exec や break など、スクリプト用のものがさらにいくつかあります)。

インタラクティブなリベース アクション、Git が各アクションで行うこと、および GitTree 内のキー
アクションGitTreeを入力してくださいGit が行うことそれを使用して、
選ぶpコミットをそのまま保持します。コミットはそのままにしておきます (デフォルト)。
言い換えるr変更を保持し、新しいメッセージを作成できるようにします。タイプミスや曖昧な要約を修正します。
編集するeコミットを再生し、修正できるように停止します。コミットを分割するか、そのファイルを変更します。
スカッシュsコミットを上記のコミットに結合し、両方のメッセージを結合します。関連するコミットに参加し、メモを保管します。
修正fコミットを上記のものに結合し、以前のメッセージのみを保持します。静かに小さな修正を加えます。
修正 -Cアクションメニュー:「修正、そのメッセージを使用」fixup と似ていますが、代わりにこのコミットのメッセージを保持します。以前のメッセージを修正とともに置き換えます。
落とすdコミットをブランチの外に残します。デバッグまたは実験的なコミットを削除します。

順序は重要であり、これは `git log` の逆です。 このプランでは、最も古いコミットが再生順に先頭にリストされますが、git log とほとんどのコミット グラフでは最新のコミットが最初に表示されます。スカッシュまたはフィックスアップは常に、そのすぐ上にある古い方のコミットに結合されます。スカッシュが折り畳まれるものが何もない状態で一番上に来てしまった場合、保持しているコミットの下にスカッシュを移動するまで、GitTree は開始を拒否します。

同等のコマンドライン: git rebase -i

コマンドラインで、変更するコミットのすぐ下のコミットに名前を付けます。HEAD から逆算するか、ブランチが main を離れた時点を使用します。

# rewrite the last 5 commits
git rebase -i HEAD~5

# rewrite everything since the branch left main, without moving its base
git rebase -i $(git merge-base main HEAD)

Git がエディターを開き、ToDo リストが表示されます。これは、さらに下のスクリーンショットと同じ計画です。2 番目のコミットが最初のコミットに圧縮され、4 番目のコミットで新しいメッセージが取得されます。

pick f2cd67d chore(deps): upgrade Next.js and React
squash 19a1104 ci: cache pnpm store and run tests in parallel
pick f52edc8 refactor(api): extract repository layer from handlers
reword 05dfac2 feat(api): rate limit public endpoints
pick bf2385e fix(web): focus trap in the invite dialog

ファイルを保存して閉じると、Git の再生が開始されます。スカッシュ メッセージと言い換えられたメッセージを要求し、edit のステップまたは競合で一時停止し、続行するか諦めます。

git rebase --continue   # after amending or resolving a conflict
git rebase --abort      # stop and put the branch back where it was

GUI は、Git が計画をどのように扱うかではなく、計画の作成方法を変更します。 GitTree は、コンピューターに既にインストールされている Git (バージョン 2.39 以降) を使用して同じプランを実行するため、アプリとターミナルは同じコミットを生成します。より広範なトレードオフについては、Git GUI vs コマンド ライン を参照してください。

GUI でインタラクティブなリベースを実行する方法: GitTree のステップバイステップ

  1. ブランチをチェックアウトし、作業コピーを整理します

    クリーンアップしたいブランチをチェックしてください。最初にコミットされていない変更をコミットまたはスタッシュするか、このリベース用に変更をスタッシュし、後で元に戻すオプションにチェックを入れます。

  2. ベースコミットからエディタを開きます

    コミット グラフで、変更する最も古いコミットのすぐ下にあるコミットを右クリックし、上記のコミットの対話型リベース… を選択します。同時に別のブランチに移動するには、そのブランチを右クリックし、現在のブランチをこれに対話的にリベースする… を選択します。

  3. コミットごとにアクションを選択する

    各行のメニューを使用するか、行にフォーカスして p、r、e、s、f または d を押して選択、言い換え、編集、スカッシュ、修正、またはドロップを行います。

  4. ドラッグまたはキーボードによる並べ替え

    コミットが希望の順序になるまで、ハンドルを持って行をドラッグするか、行にフォーカスして Alt+↑ または Alt+↓ を押します。

  5. 新しいメッセージを書く

    言い換え行を指定すると、その場でメッセージ ボックスが開きます。潰された各グループは結合されたメッセージとともにリストの下に表示され、編集できる状態になっているため、開始する前に結果のコミットを確認できます。

  6. オプションを確認して開始します

    ローカルの変更を隠し、これらのコミット (update-ref) を指すブランチを移動し、修正を調整するかどうかを選択します。コミット (オートスカッシュ)。いくつかのコミットがすでにリモート上にあるかどうかを確認し、Start Rebase をクリックします。

  7. 続行、中止、または元に戻す

    編集または競合のためにステップが停止した場合、バナーには「リベースの続行」と「リベースの中止」が表示されます。リベースが完了すると、Undo によってブランチ全体が元に戻ります。

GitTree のインタラクティブなリベース エディタ: 最も古いコミットが一番上にあり、コミットごとに 1 つのアクション (ここではスカッシュと新しいメッセージが所定の位置に入力されたリワード)、ハンドルをドラッグして並べ替え、Start Rebase でプランを実行します。
GitTree のインタラクティブなリベース エディタ: 最も古いコミットが一番上にあり、コミットごとに 1 つのアクション (ここではスカッシュと新しいメッセージが所定の位置に入力されたリワード)、ハンドルをドラッグして並べ替え、Start Rebase でプランを実行します。

Git GUI でコミットをスカッシュする方法

コミットをスカッシュする方法についての簡単な答えは、コミットを並べて配置し、最初のものをピックとして残し、残りをスカッシュまたはフィックスアップとしてマークして、再実行することです。 GitTree にはそこに行くための 3 つの方法があります。

リベースエディターでコミットのグループを潰す

グループの下のコミットからエディターを開き、最初のコミットを選択に設定し、他のコミットをスカッシュに設定するか、メッセージが不要な場合はフィックスアップに設定します。グループが連続していない場合は、離れたコミットを所定の位置にドラッグします。 GitTree は、編集可能なボックス内の結合されたメッセージとともに、スカッシュを含む各グループをコミットとしてプレビューします。

グラフ内のコミットを選択し、「Squash Commits」を選択します

簡単にスカッシュするには、グラフ内の現在のブランチの 2 つ以上の連続するコミットを選択し、右クリックして [スカッシュ コミット] を選択します。 GitTree はリベースを実行し、Undo で個別のコミットを元に戻すことができます。同じメニューで、単一のコミットを 1 つのステップで書き換えます: コミット メッセージの編集...、コミットのドロップ...、コミットを上に移動、コミットを下に移動。これらのショートカットは、まだリモート上にないコミットに対して機能します。プッシュされたコミットの場合は、最初に確認を求めるエディターを使用します。

プルリクエストをマージするときにスカッシュします

チームがプル リクエストごとに 1 つのコミットを保持する場合、ブランチを書き直す必要はまったくない場合があります。GitTree のプル リクエスト ビューはスカッシュとマージでき、ローカル ブランチは元の状態のままになります。

GitTree のグラフ内の任意のコミットを右クリックすると、上記のコミットのインタラクティブ リベース…に加えて、コミット メッセージの編集…、コミットのドロップ…、コミットを上に移動、コミットを下に移動するというワンステップの書き換えが可能です。
GitTree のグラフ内の任意のコミットを右クリックすると、上記のコミットのインタラクティブ リベース…に加えて、コミット メッセージの編集…、コミットのドロップ…、コミットを上に移動、コミットを下に移動するというワンステップの書き換えが可能です。

コミットの修正と自動スカッシュ: 手動で順序を変更せずに古いコミットを修正します。

作業中に、小さな修正をそれぞれ、それが属するコミットの修正としてコミットします。 Git では fixup! <original title> というタイトルを付けています。その後、autosquash を使用した 1 つのインタラクティブなリベースによって、すべてのフィックスアップがターゲットの直下に移動され、フィックスアップとしてマークされるため、リストを確認して開始するだけで済みます。

# record a correction for an earlier commit
git commit --fixup=05dfac2

# correct the commit and replace its message too
git commit --fixup=amend:05dfac2

# later: fold every fixup! and amend! commit into its target
git rebase -i --autosquash main

# turn autosquash on for every interactive rebase
git config --global rebase.autoSquash true

GitTree では、グラフの下にドッキングされている組み込みターミナルでこれらのコマンドを実行するか、コミット メッセージ ボックスに fixup!、スペース、元のタイトルを入力します。 Git はタイトルでフィックスアップを照合するため、両方とも同じコミットを作成します。 アレンジフィックスアップ! でスカッシュ!そして修正してください! commits オプションをオンにすると、すでに配置されたエディターが開き、表示されるものはまさに Git が実行するものになります。

amend! コミットはプラン内で fixup -C になります (GitTree の「修正、そのメッセージを使用します」)。その変更は組み込まれ、そのメッセージはターゲットのメッセージを置き換えます。 git-commit ドキュメント によると、どちらの種類でも元のコミットの作成者は変わりません。

インタラクティブなリベースは安全ですか?元に戻す、reflog およびリース付き強制

リベースは古いコミットをすぐには削除しません。かなり後で Git のガベージ コレクションが到達不能なオブジェクトをクリアするまで、それらは reflog から到達可能なままになります。本当のリスクは、古いブランチを見失うことと、リモート上の同僚の作業を上書きすることです。

完了したリベースを元に戻す

GitTree はリベースするたびにブランチのスナップショットを作成するため、それ以降ブランチを移動していない限り、ツールバーの 元に戻す を 1 回のクリックで元に戻します。これにはリベースによって update-refs で移動された他のブランチも含まれます。 git のリセット、リベース、またはコミットを元に戻す方法 では、残りのセーフティ ネットについて説明します。コマンドラインで:

# still in the middle of the rebase
git rebase --abort

# already finished: go back to the tip from before the rebase
git reflog show --date=relative
git reset --hard ORIG_HEAD

Git はリベースの開始時に ORIG_HEAD を古いチップに設定しますが、リベース中に (コミットを分割するためなどに) git reset を実行すると、これが移動されます。リベース直後、現在のブランチの前の位置である @{1} は依然として古いヒントを指しているため、git reset --hard @{1} も機能します。 git reset --hard はコミットされていない変更を破棄するため、最初にそれらをコミットまたはスタッシュします。

すでにプッシュしたコミットを書き直す

GitTree は、すでにリモート上にあるコミットに「リモート上」というラベルを付け、書き換える前に確認を求めます。その後は通常のプッシュが拒否されるため、強制プッシュが必要になります。リース フォームを使用します。これは、リモート ブランチが最後に参照した場所を指している場合にのみリモート ブランチを上書きします。

git push --force-with-lease

# safer when something fetches in the background
git push --force-with-lease --force-if-includes

バックグラウンドで取得するとリモート追跡ブランチが更新され、リースが弱くなる可能性があるため、git-push ドキュメント では --force-if-includes を追加することを推奨しています。 GitTree では、強制プッシュは常に --force-with-lease を使用し、確認時に表示されるリモート ヒントに固定され、そのヒントはローカルの refs/ogt/trash に保持されるため、リモートから削除されるコミットは失われません。リモコンが変更されたため、強制プッシュを元に戻すことはできません。

ステップが停止したとき: 編集と競合

edit ステップ、または完全に適用されなくなった commit は、リベースを一時停止します。 GitTree には、計画の進行状況と、続行または中止するためのバナーが表示されます。競合は 3 方向エディターで開き、GUI でのマージ競合の解決 で説明されています。リベース中、Git はマージの側面を入れ替えます。「ours」はリベース先のブランチ、「theirs」は自分のコミットであるため、GitTree はそれらに「リベース先」と「あなたのコミット」というラベルを付けます。レッスン アクティブな操作を続行、スキップ、または中止する では、それぞれの選択を練習します。また、ブランチを書き直す代わりに 1 つのコミットをコピーする方法については、cherry-pick を参照してください。

プル リクエストの前にクリーンなコミット履歴を作成するためのヒント

  • すべてのコミットを独自にビルドしてテストに合格させ、無関係な変更を分けて保存します (1 つのコミットはリファクタリング用、もう 1 つは機能用)。
  • pull リクエストを開く前に最新の main にリベースすることで、レビュー担当者には変更内容のみが表示されます。
  • 積み重ねられたブランチを操作しますか? update-refs をオンにすると、ブランチ上に構築されたブランチが書き換えられたコミットとともに移動します。
  • 範囲にマージ コミットが含まれている場合、GitTree はそれを表示しますが、書き換えはしません。その場合は git rebase -i --rebase-merges を使用してください。
  • プッシュする前に コミット グラフ で結果を確認し、クロード コードとコーデックスによる AI コミット メッセージ のように、独自の AI コーディング CLI ドラフト メッセージを実行させます。
  • まずは無料レッスン 未公開の作品を新しいベースにリベースする で、使い捨てリポジトリで練習してください。

GitTree には、English and Arabic の macOS、Windows、および Linux でプライベート リポジトリを含むすべての Git 機能をカバーする無料プランがあります。 AI アシスタントの Nour には、GitTree Pro が付属しています (価格 を参照)。サインインするには、Git 2.39 以降と GitTree アカウントが必要です。ダウンロード ページ から入手するか、最初に 最高の Git GUI クライアント を比較してください。

よくある質問

git rebase のスカッシュとフィックスアップの違いは何ですか?

どちらもコミットをリベース プランの上のコミットに結合するため、2 セットの変更が 1 つのコミットになります。 Squash では両方のコミット メッセージを結合して結果を編集できますが、fixup では前のコミットのメッセージのみが保持され、後のコミット メッセージは破棄されます。 Fixup -C はその逆を実行し、後のメッセージを保持します。

最後の 3 つのコミットを潰すにはどうすればよいですか?

コマンドラインで git rebase -i HEAD~3 を実行し、最初の行を pick のままにし、他の 2 行を squash または fixup に変更して保存し、結合されたメッセージを編集します。 GitTree で、ブランチの上から 4 番目のコミットを右クリックし、[上のコミットのインタラクティブ リベース] を選択し、2 つの新しいコミットをスカッシュするように設定して、Start Rebase をクリックします。 3 つのコミットがまだリモート上にない場合は、それらを選択して [Squash Commits] を選択することもできます。

インタラクティブなリベースを元に戻すにはどうすればよいですか?

リベースがまだ実行中の場合は、 git rebase --abort または GitTree のバナーにある [リベースの中止] ボタンを使用して停止します。すでに終了している場合は、GitTree で Undo を使用してリベース前に取得したスナップショットを復元するか、コマンド ラインで git replace --hard ORIG_HEAD を実行します。古いブランチが必要な場合は、reflog にブランチの以前の位置がすべてリストされます。

すでにプッシュしたコミットをリベースしても安全ですか?

git Push --force-with-lease でプッシュする限り、自分だけが使用するブランチでは安全です。これにより、まだ見ていないコミットの上書きが拒否されます。共有ブランチでは、履歴を書き換えると他の全員が自分のコピーを修復する必要があるため、最初にチームに同意するか、ブランチを書き換えるのではなく、プル リクエストがマージされるときに潰してください。

GitTree は修正をサポートしていますか?コミットとオートスカッシュ?

はい。タイトルが fixup!、squash! で始まるコミットまたは修正してください!単一のリベースに対して、または rebase.autoSquash 設定に従うことができる設定を通じてデフォルトで、対話型リベース エディターが開いたときに自動的に配置できます。何かを実行する前でも整理されたリストが表示され、Git はそのリストを正確に実行します。

macOS、Windows、および Linux でコマンドラインを使用せずに対話型リベースを実行できますか?

はい。 GitTree のインタラクティブなリベース エディタは、macOS、Windows、および Linux で同様に機能します。選択、言い換え、編集、スカッシュ、修正、ドロップ、ドラッグ アンド ドロップまたはキーボードの並べ替えと元に戻すことができます。このアプリには、すべての Git 機能 (AI アシスタントの Nour は GitTree Pro に付属) をカバーする無料プランがあり、GitTree アカウントで動作し、コンピューターにすでにインストールされている Git (バージョン 2.39 以降) を使用します。

インタラクティブ リベースまたはスカッシュ マージでスカッシュする必要がありますか?

いくつかの意味のあるコミットが存続し、クリーンアップされ、賢明な順序で保存される必要がある場合、またはレビュー担当者がプル リクエストのコミットをコミットごとに読み取る場合は、インタラクティブなリベースを使用します。プル リクエスト全体を 1 つのコミットとしてメイン ブランチに到達させる必要がある場合は、スカッシュ マージを使用します。これにより、自分のブランチは変更されず、強制プッシュが必要なくなります。

情報源

他の製品に関する申し立ては、2026年10月22日 の公式ページと照合して確認されました。価格と機能は変更されます。ベンダーのページが真実の情報源です。