9

長く存続しているブランチのマージを行いましたが、競合の解決のためにマージを完了するのに時間がかかりました。

で自分の作品を公開できないことがわかりましたgit-svn:git svn rebaseは、1 つのマージ コミットを送信する代わりに、マージされたブランチのすべてのコミットをリベースします。発見git merge --squashが少し遅かった…

rerere既に行われたすべての競合解決作業を失うことなく (つまり、ツールを有効にしていないため、新しいマージをトリガーすることなく)、マージ コミットを「スカッシュ マージ」コミットに変更 (リベース インタラクティブ?) することは可能ですか?

4

3 に答える 3

11

and をgit merge( --no-ff) とマージして、それを a と同等のものに変換したいgit merge --squash場合は、次のプロセスを使用できます (マージ コミットがブランチの最新のコミットであると仮定します)。

  • 影響を受けるブランチがチェックアウトされていることを確認してください。
  • git reset --hard HEAD~1 (ブランチをマージ前のコミットにリセットします。心配する必要はありません。失われることはありません!)
  • git cherry-pick -m 1 HEAD@{1} (このブランチとの差分に基づいて、削除したばかりのマージ コミットを通常のコミットとしてチェリー ピックします)

マージ中に行われた競合解決を保持するだけでなく、元のマージ コミット情報 (メッセージ、作成者、日付など) も保持するため、一貫したコミット メッセージを生成する BitBucket などのツールからの不適切なマージを修正するのに非常に役立ちます。

squash-commit のみのポリシーがあるため、誰かが誤って BitBucket PR から通常のマージ オプションを選択した場合は常に、これを使用することになります。または、Slack BitBucket ボットの「マージ」ボタンをクリックしても、マージ戦略を選択することはできません...

于 2020-04-04T13:30:09.693 に答える