マージコミットのメッセージを編集または言い換えるにはどうすればよいですか?
git commit --amend
それが最後に行われたコミット(HEAD
)の場合は機能しますが、それが前に来る場合はどうなりHEAD
ますか?
git rebase -i HEAD~5
マージコミットは一覧表示されません。
--preserve-merges
オプション(またはその同義語-p
)をコマンドに追加するgit rebase -i
と、gitは履歴を線形化するのではなく、リベース時にマージを保持しようとします。また、マージコミットも修正できるはずです。
git rebase -i -p HEAD~5
ノート。git v2.22(https://www.infoq.com/news/2019/07/git-2-22-rebase-merges/--perserve-merges
)の時点で非推奨になりました。--rebase-merges
git1.7.9.6(およびgit1.7.10 +)以降は、マージに詳細を追加するために、git merge
それ自体が常にエディターをトリガーすることに注意してください。
"
git merge $tag
"注釈付きタグをマージするには、インタラクティブな編集セッション中に常にエディターが開きます。v1.7.10シリーズでは、環境変数GIT_MERGE_AUTOEDITが導入され、古いスクリプトがこの動作を拒否できるようになりましたが、メンテナンストラックもこれをサポートする必要があります。
GIT_MERGE_AUTOEDIT
また、古いスクリプトがこの動作を拒否するのに役立つ環境変数も導入されています。
「 Git1.7.10の予測」を参照してください。
最近、Gitメーリングリストでの議論で、Linusは、これがGitの歴史の初期に私たちが犯した設計上の間違いの1つであることを認めました(そして私は同意しました)。
また、1.7.10以降では、インタラクティブセッションで実行されるgit mergeコマンド(つまり、標準入力と端末に接続された標準出力の両方)は、マージ結果を記録するコミットを作成する前にエディターを開き、次のようにします。競合するマージを解決した後にユーザーが実行するgitcommitコマンドと同じように、ユーザーはマージについて説明する機会があります。
ライナスは言った:
しかし、私はそれが実際にどのように機能するかについてはあまり気にしません-私の主な問題は、gitが悪いマージメッセージを簡単に作成できるようにすることです。
その一部はさらに単純なばかだと思います。デフォルトでは「gitmerge」に対してエディターを起動することはありませんが、「」に対しては起動しますgit commit
。
これは設計上の誤りであり、実際にマージにメモを追加する場合は、余分な作業を行う必要があることを意味します。だから人々はしません。
Git 2.17(2018年第2四半期)より前の「git rebase -p
」は、マージコミットのログメッセージを壊していたことに注意してください。これは現在修正されています。
Gregory Herrero( ``)によるcommit ed5144d(2018年2月8日)を参照してください。
提案者:Vegard Nossum()、およびQuentin Casasnovas()。( Junio C Hamanoによってマージされました---コミット8b49408、2018年2月27日)vegard
casasnovas
gitster
rebase -p
:を呼び出すときの誤ったコミットメッセージを修正しましたgit merge
。commit dd6fb00("
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
を実行すると、新しいマージを作成して既存のマージを置き換える必要がない場合でも、ユーザーがログメッセージを編集できるようになります(つまり、早送りします)。 )、しかししませんでした。
これは修正されました。
Phillip Wood()によるcommit 6df8df0(2019年5月2日)を参照してください。( Junio C Hamanoによってマージされました---コミットc510261、2019年6月13日)phillipwood
gitster
プリミティブコマンドのみを使用したもう1つの良い答え-knittlhttps : //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つだけです。
2021年からの更新-p
は非推奨です。
--rebase-merges
代わりに使用してください。
--rebase-merges
(または短縮された-r
)フラグを使用します。
git rebase -i -r HEAD~5
次に、変更するコミットの横にある「pick」テキストを「edit」または「reword」に変更します。
pick <commit-hash-to-leave> <message>
edit <commit-hash-to-change> <message>
--rebase-merges
フラグは非推奨--preserve-merges
(または短縮された-p
)を置き換えます
ドキュメント:https ://git-scm.com/docs/git-rebase#Documentation/git-rebase.txt--r
git merge --edit
非対話型マージの場合でもコメントを付けることができます。
git merge --edit --no-ff
開発ブランチに基づいてgitflowをフォローし、早送りせずにそれにマージする場合に便利です。
コマンドはgit rebase -i HEAD~5
エディターをポップアップします。指定されたコミット(この場合は5つ)が一覧表示されます。最初の列にはpick
、すべてのコミットが含まれます。そのエディタでに置き換えpick
てreword
、エディタを保存して閉じます。pick
次に、gitは、変更したコミットごとにエディターをポップアップしreword
、コミットメッセージを編集できるようにします。