SourceTreeでつぶすことは可能ですか?明らかに、コミットを押しつぶすために「ドラッグアンドドロップ」できることがわかりました。ただし、それを行うと、いくつかのコミットのみが強調表示されます。
1.4.1.0の時点では、Windowsユーザーはまだスカッシュを持っていません。ただし、手で同じ結果を得ることができます。
ブランチAをブランチBにスカッシュするには:
コミット。
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はあなたの友達です。
親コミットを右クリックし、「子をインタラクティブにリベース」を選択します。その後、コミットをスカッシュするためにドラッグアンドドロップできるようになります。
私は古い機能のみを使用しているため、この回答はどのプラットフォームのほとんどのバージョンのSourcetreeでも機能します。あなたがそれを考えた後、それは非常に簡単です。いつものように、作品を公開する前にのみ機能します。共有リポジトリで「きちんとした」コミットを作成するために使用し、自分のローカルリポジトリで頻繁にコミットします。あなたがローカルブランチmyfeature
にいると仮定します。ブランチOrigin/myfeature
の前にいくつかのコミットがあるとします。手順全体を通してブランチmyfeature
内にとどまることができるため、他の人の作業に影響を与えることはありません。
公開された最新のコミットで「現在のブランチをこのコミットにリセットする」を実行します。これは、Origin/myfeature
というラベルのコミットです。混合リセットでは、すべての変更が保持されます。リセットが混在していることを確認してください。 (誤ってハードリセットを行うと、作業が失われます...)
変更をステージングします(通常どおり)。途中で追加または削除したファイルを忘れないでください!
コミット。独自の(ローカル)コミットメッセージはすべて失われるため、それらを要約した適切なコミットメッセージを作成します。
手順1ですべてをつぶし、ローカルコミットをクリーンアップしました。まだ自分の機能ブランチにいるので、他には何も影響していません。安全でないと感じる場合は、他の作業を行う前に最新のコミットにラベルを付けてください。安全のために。このようにして、問題が発生した場合に備えて、常にそのラベルにハードリセットできます。すべてうまくいった場合は、そのラベルを削除してコミット履歴をクリーンアップします。