web-dev-qa-db-ja.com

SourceTreeのスカッシュ

SourceTreeでつぶすことは可能ですか?明らかに、コミットを押しつぶすために「ドラッグアンドドロップ」できることがわかりました。ただし、それを行うと、いくつかのコミットのみが強調表示されます。

26
Miles

1.4.1.0の時点では、Windowsユーザーはまだスカッシュを持っていません。ただし、手で同じ結果を得ることができます。

ブランチAをブランチBにスカッシュするには:

  1. Aからブランチを作成し、Cと呼びます。
  2. softモードでCをBにリセットします。
  3. Bをご覧ください。
  4. コミット。

    1.              2.                          3.                             4.
        * <- [A][C]    * <- [A]                    * <- [A]                       * <- [A]
        |              |                           |                              |
        *              * o <- [C] with changes     * o <- [C][B] with changes     * * <- [C][B] committed
        |              |/                          |/                             |/
        * <- [B]       * <- [B]                    *                              *
        |              |                           |                              |
        :              :                           :                              :
    

Aの位置を保持する必要がない場合は、Cを作成する必要はありません。

終了するまですべての切り離されたコミットを見ることができるので、これらを行う間はgitkを脇に開くことをお勧めします。 (SourceTreeでこの寛大さを確認したい)

少なくとも、reflogはあなたの友達です。

6
snipsnipsnip

親コミットを右クリックし、「子をインタラクティブにリベース」を選択します。その後、コミットをスカッシュするためにドラッグアンドドロップできるようになります。

5
alvarodoune

あなた自身の地元の機能ブランチ内のオールドスクールスカッシュ

私は古い機能のみを使用しているため、この回答はどのプラットフォームのほとんどのバージョンのSourcetreeでも機能します。あなたがそれを考えた後、それは非常に簡単です。いつものように、作品を公開する前にのみ機能します。共有リポジトリで「きちんとした」コミットを作成するために使用し、自分のローカルリポジトリで頻繁にコミットします。あなたがローカルブランチmyfeatureにいると仮定します。ブランチOrigin/myfeatureの前にいくつかのコミットがあるとします。手順全体を通してブランチmyfeature内にとどまることができるため、他の人の作業に影響を与えることはありません。

ステップ1

公開された最新のコミットで「現在のブランチをこのコミットにリセットする」を実行します。これは、Origin/myfeatureというラベルのコミットです。混合リセットでは、すべての変更が保持されます。リセットが混在していることを確認してください。 (誤ってハードリセットを行うと、作業が失われます...)

ステップ2

変更をステージングします(通常どおり)。途中で追加または削除したファイルを忘れないでください!

ステップ3

コミット。独自の(ローカル)コミットメッセージはすべて失われるため、それらを要約した適切なコミットメッセージを作成します。

できた!

手順1ですべてをつぶし、ローカルコミットをクリーンアップしました。まだ自分の機能ブランチにいるので、他には何も影響していません。安全でないと感じる場合は、他の作業を行う前に最新のコミットにラベルを付けてください。安全のために。このようにして、問題が発生した場合に備えて、常にそのラベルにハードリセットできます。すべてうまくいった場合は、そのラベルを削除してコミット履歴をクリーンアップします。

1
Stef Joosten