コミットをスカッシュする
Squashing combines several commits into one, like a fixup or squash in git rebase -i. GitTree では、すべてのスカッシュで最初に Squash ダイアログが開きます。ダイアログには、フォールドされたコミット、結果、メッセージ、クレジットの取得者が表示され、確認するまで何も変更されません。 Your uncommitted work is never touched, and Undo puts the commits back.
GitTree で動作します 無料: サインインすると、すべてのローカル Git 機能が利用できます。
このページでは
始める前に
- コミットは、チェックアウトしたブランチ上に、途切れることのない 1 行で表示されます。選択にはマージ コミットを保持できません。 Squash Branch… できます。
- 潰されたコミットとその上のすべてのコミットは新しい ID を取得します。すでにプッシュしている場合は、後で強制的にプッシュする必要があります。別のリモート ブランチに含まれる履歴をここで潰すことはできません。
どこで見つけられますか
- グラフ内で 2 つ以上のコミットを選択し (Shift キーを押しながら範囲をクリックして)、右クリックします: Squash Commits…。
- 1 つのコミットを右クリックします: Edit History › Squash into Parent… または Fixup into Parent…。
- グラフまたは左側のパネルでチェックアウトしたブランチを右クリックします: Squash Branch…。
Alt(Mac の場合は⌥) を押したまま、コミットをそのすぐ上または下のコミットにドラッグします。- commit: Edit History › Create Fixup Commit… を右クリックして、その修正としてステージングされたものをコミットします。
- これらはすべて、コマンド パレットと機能ガイドの Squash カードにもあります。
| アクション | macOS | WindowsとLinux |
|---|---|---|
| 選択範囲の Squash Commits… | ⌥S | Alt+S |
| 選択したコミットの Squash into Parent… | ⌥Q | Alt+Q |
| Squash Branch… チェックアウトされたブランチ | ⌥⇧B | Alt+Shift+B |
| Undo スカッシュ | ⌘Z | Ctrl+Z |
ステップ
スカッシュダイアログを開く
上記の任意のエントリを使用します。ダイアログには、Squash 3 Commits、Squash a1b2c3d into Its Parent、または Squash Branch feature/login など、スカッシュした内容に基づいた名前が付けられます。その概要行は、「3 コミットが 1 · 12 ファイル · +240 −31 · Ada の著作権を保持する」のようになります。
折りたたまれたコミットを確認する
Commits that fold は、Result の下に古いものから順にリストします。1 つのコミットは、最も古いものの作成者によって書き込まれます。 Squash Branch… の場合、Base: は枝が根元から離れた場所を示します。 Change… を使用すると、別のブランチ、タグ、またはコミットを入力でき、計画が再度作成されます。
メッセージを選択してください
Start the message from で、Combine Messages、Oldest Message、Newest Message、List of Commits、または Write My Own を選択し、必要に応じてテキストを編集します。概要行は必須です。
他の著者のクレジットを明記しておきます
When other people wrote some of the commits, Credit the other authors (Co-authored-by) adds a
Co-authored-byline for each of them.追加する行はその下にリストされます。それらを除外するにはチェックを外します。他に何が変更されたかを読んでから潰す
What else changes は、上記のコミットの数が新しい ID を取得するか (変更は同じまま)、他のどのブランチまたはタグが古いコミットを保持するかを示します。 Squash 3 Commits や Squash into Parent などの確認ボタンを押します。
期待される結果
たとえば、GitTree は、Undo ボタンを備えた 3 commits squashed into a1b2c3d. を示します。グラフには、複数のコミットがあった場合に 1 つのコミットが表示されます。
ステージングされた変更とステージングされていない変更、および追跡されていないファイルは、元の状態のままです。スカッシュは作業ツリーに触れることはありません。
潰す方法
| 指示 | 折りたたむもの |
|---|---|
| Squash Commits… | 選択したコミット。チェックアウトされたブランチ上で 2 つ以上隣り合っています。 |
| Squash into Parent… | その下のコミットに 1 つのコミットを追加します。 |
| Fixup into Parent… | 同様に、親のメッセージのみを保持します (git rebase -i の fixup など)。 |
| Squash Branch… | ブランチがベースを離れてからのすべてのコミットは、マージを含めて、そのベース上の 1 つのコミットにまとめられます。 |
Alt を押しながらドラッグ | ドラッグされたコミットとそれをドロップした近隣。キュー Drop to squash … はドロップできる場所を示します。 Escはキャンセルします。 |
すでにプッシュしたコミット
ブランチの上流にコミットがある場合は、ダイアログにその旨が表示され、潰す前に I will force push … after squashing にチェックを入れるように求められます。その後、メッセージは Force Push… を提供します。これは、リモート ブランチが最後に表示された場所にまだある場合にのみリモート ブランチを置き換えます (強制プッシュ)。
後で使用できるようにコミットを修正する
今は何も書き直さずに古いコミットを修正するには、変更をステージングし、そのコミットで Create Fixup Commit… を選択します。 Fixup (メッセージを保持)、Squash (メモを追加)、または Amend (メッセージを New message で置き換え) を選択します。 GitTree は、fixup!、squash!、または amend! のコミットをコミットします。 Arrange fixup!, squash! and amend! commits をオンにした interactive rebase はそれを折り込みます。
スカッシュマージは作成者を保持します
Squash into staged changes (no commit) で ブランチをマージ すると、空のコミット ボックスには、作成者に対する Co-authored-by 行を含むコミットをリストするメッセージが表示されます。すでに書いたメッセージは保存されます。
設定
[設定] › General で、Squash: starting message はダイアログの開始メッセージを選択し、Squash: credit co-authors はクレジットのチェックを開始するかどうかを設定します。各スカッシュは両方を変更することができます。
何か問題が発生した場合
「コミットは互いに隣接していません。途切れていない実行を選択してください。」
チェックアウトされたブランチで互いに続くコミットを選択するか、ブランチ全体に Squash Branch… を使用します。
「マージコミットは折りたたまれます。Squash Branch…マージは折りたたまれますが、選択は折りたたまれません。」
コミットごとに選択するには、Squash Branch… または interactive rebase を使用します。
「…これらのコミットが含まれています。それらは共有履歴であり、ここで潰すことはできません。」
別のリモートブランチにはそれらがあります。そのままにするか、コマンド ラインから共有履歴を書き換える前にチームと同意してください。
スカッシュはエラーと Review Again ボタンで停止します
ダイアログが開いている間に何かがブランチを変更したため、何も潰されませんでした。 Review Again を押して新しいプランを表示し、もう一度押します。
質問
スカッシュを元に戻すにはどうすればよいですか?
メッセージまたはツールバーで Undo を押します。 GitTree はブランチを移動する前に古いコミットを refs/ogt/trash に保持していたので、それらはまったく同じ状態に戻ります。
潰されたコミットには誰の名前がありますか?
折りたたまれた最も古いコミットの作成者とその日付。あなたがコミッターです。他の全員のクレジットを維持するには、Credit the other authors (Co-authored-by) をオンにします。
スカッシングによってコミットフックが実行されたり、作業ファイルが変更されたりすることはありますか?
いいえ。GitTree は、git rebase が内部的に行う方法と同様に、新しいコミットを直接書き込みます。作業ツリー内のインデックスやファイルを変更することはありません。 Git 設定で署名付きコミットが要求されると、それらに署名します。