マージコミットのメッセージを編集または書き換えるにはどうすればよいですか?
git commit --amend
は、最後のコミット(HEAD
)であれば機能しますが、HEAD
の前に来るとどうなりますか?
git rebase -i HEAD~5
は、マージコミットをリストしません。
--preserve-merges
オプション(またはその同義語、-p
)をgit rebase -i
コマンドに追加すると、gitは履歴を線形化するのではなく、リベース時にマージを保持しようとします。マージコミットも修正できます。
git rebase -i -p HEAD~5
開始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 -p
:git merge
を呼び出すときの不正なコミットメッセージを修正しました。commit dd6fb ( "
rebase -p
:git 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日)
プリミティブコマンドのみを使用した別の素敵な回答-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のフローに従って開発ブランチをリベースし、早送りせずにマージする場合に役立ちます。