web-dev-qa-db-ja.com

Git:マージコミットのメッセージを編集/書き換える方法は?

マージコミットのメッセージを編集または書き換えるにはどうすればよいですか?

git commit --amendは、最後のコミット(HEAD)であれば機能しますが、HEADの前に来るとどうなりますか?

git rebase -i HEAD~5は、マージコミットをリストしません。

135
ma11hew28

--preserve-mergesオプション(またはその同義語、-p)をgit rebase -iコマンドに追加すると、gitは履歴を線形化するのではなく、リベース時にマージを保持しようとします。マージコミットも修正できます。

git rebase -i -p HEAD~5
181
Mark Longair

開始git1.7.9.6 (およびgit1.7.10 +)、git merge自体は常にエディターをトリガーします、マージに詳細を追加します。

注釈付きタグをマージする「git merge $tag」は、インタラクティブな編集セッション中に常にエディターを開きます。 v1.7.10シリーズでは、環境変数GIT_MERGE_AUTOEDITを導入して、古いスクリプトがこの動作を拒否するのを支援しましたが、メンテナンストラックもサポートする必要があります。

また、環境変数GIT_MERGE_AUTOEDITを導入して、古いスクリプトdeclineのこの動作を支援します。

Git 1.7.10を期待しています 」を参照してください。

最近 Gitメーリングリストに関する議論 で、LinusはこれがGitの歴史の初期に設計ミスを犯したことの1つであることを認めました(そして同意しました)。
そして1.7.10以降では、インタラクティブセッションで実行されるgit mergeコマンド(つまり、端末に接続された標準入力と標準出力の両方)は、記録をコミットする前にエディターを開きます。マージ結果。ユーザーにマージを説明する機会を与えます。これは、競合するマージを解決した後にユーザーが実行するgit commitコマンドと同じように実行します。

ライナスは言った:

しかし、私はそれが実際にどのように機能するかをあまり気にしません-私の主な問題は、gitが悪いマージメッセージを持つのをあまりにも簡単にすることです。
その一部はさらにシンプルなイディオイだと思います:「git merge」ではデフォルトでエディターを起動することはありませんが、「git commit」では行う。
これは設計ミスであり、実際にマージにメモを追加する場合は、余分な作業を行う必要があることを意味します。したがって、人々はそうしません


Git 2.17(2018年第2四半期)より前では、「git rebase -p」がマージコミットのログメッセージを破壊していたことに注意してください。

commit ed5144d (2018年2月8日)by Gregory Herrero( ``) を参照してください。
推奨: Vegard Nossum(vegard 、および Quentin Casasnovas(casasnovas
C浜野順夫-gitster- in commit 8b49408 、2018年2月27日)

rebase -pgit mergeを呼び出すときの不正なコミットメッセージを修正しました。

commit dd6fb ( "rebase -pgit mergeを呼び出す際の引用を修正、2018年1月、Git 2.16.0-rc2)であるため、リベースされているマージコミットのコミットメッセージはサブシェルを使用してマージコマンドに渡されます'git rev-parse --sq-quote'を実行しています。

git mergeコマンドの改行が保持されるように、このサブシェルの周りに二重引用符が必要です。

このパッチの前、次のマージメッセージ:

"Merge mybranch into mynewbranch

Awesome commit."

になる:

"Merge mybranch into mynewbranch Awesome commit."

rebase -pの後。


Git 2.23(2019年第2四半期)では、「 merge -c 」命令中に「 git rebase --rebase-merges 」を指定すると、他に必要がない場合でもユーザーにログメッセージを編集する機会が与えられます。新しいマージを作成し、既存のマージを置き換えます(つまり、代わりに早送りします)が、しませんでした。
修正されました。

commit 6df8df (2019年5月2日)by Phillip Wood(phillipwood を参照してください。
浜野邦夫-gitster- in commit c510261 、2019年6月13日)

29
VonC

プリミティブコマンドのみを使用した別の素敵な回答-knittlによる https://stackoverflow.com/a/7599522/94687

git checkout <sha of merge>
git commit --amend # edit message
git rebase HEAD previous_branch

またはより良い(より正確な)最終リベースコマンド:

git rebase <sha of merge> previous_branch --onto HEAD

ところで、プリミティブコマンドを使用すると、CPUをあまり消費せず、Gitがgit rebase -p -i HEAD^^^^(そのような私の場合の最後のコミットは約50秒かかったので、マージで最後の4つのコミットのみのリストになるコマンド!).

git merge --edit
非対話型マージの場合でもコメントを付けることができます。

git merge --edit --no-ffは、gitのフローに従って開発ブランチをリベースし、早送りせずにマージする場合に役立ちます。

1
Empus