SourceTree でスカッシュすることは可能ですか? どうやらコミットを「ドラッグアンドドロップ」して、コミットを押しつぶすことができるようです。ただし、それを行うと、いくつかのコミットのみが強調表示されます。
6 に答える
親コミットを右クリックし、[<sha> の子をインタラクティブにリベース] を選択します。その後、ドラッグ アンド ドロップでコミットをスカッシュできるようになります。
1.4.1.0 の時点で、Windows ユーザーはまだ squash を持っていません。ただし、手動でも同じ結果を得ることができます。
ブランチ A をブランチ B にスカッシュするには:
- A からブランチを作成し、C と呼びます。
- ソフトモードで C を B にリセットします。
- 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
。branch の前にいくつかのコミットがあるとしますorigin/myfeature
。手続き中は支店内にとどまることができるmyfeature
ので、他の人の仕事に影響を与えることはありません。
ステップ1
最後に公開されたコミットで「現在のブランチをこのコミットにリセット」を実行します。それが というラベルの付いたコミットorigin/myfeature
です。混合リセットでは、すべての変更が保持されます。リセットが混在していることを確認してください。(うっかりハードリセットをしてしまうと、作業内容が失われてしまいます…)
ステップ2
変更をステージングします (通常どおり)。途中で追加・削除したファイルを忘れずに!
ステップ 3
専念。自分の (ローカルの) コミット メッセージをすべて要約した適切なコミット メッセージを作成します。それらは失われるためです。
終わり!
ステップ 1 ですべてを押しつぶし、ローカル コミットをクリーンアップしました。まだ独自の機能ブランチにいるため、他に影響を与えていません。不安を感じる場合は、他のことをする前に最新のコミットにラベルを付けてください。安全に保管するためだけに。そうすれば、問題が発生した場合に備えて、いつでもそのラベルにハード リセットできます。すべてがうまくいった場合は、そのラベルを削除してコミット履歴をクリーンアップします。
Windows版でも「スカッシュ」のサポートを追加したばかりです。