178

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

git commit --amendそれが最後に行われたコミット(HEAD)の場合は機能しますが、それが前に来る場合はどうなりHEADますか?

git rebase -i HEAD~5マージコミットは一覧表示されません。

4

8 に答える 8

246

--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

于 2011-09-02T04:47:46.630 に答える
36

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日
vegardcasasnovas
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

于 2012-04-03T05:55:35.550 に答える
21

プリミティブコマンドのみを使用したもう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つだけです。

于 2017-03-01T15:34:35.567 に答える
8

現在のGitバージョン(2020+)の場合は、を実行してから、エディターでをgit rebase -i -r <parent>置き換えます。これにより、リベース中にエディターでマージコミットのメッセージが開き、変更できます(ヒントを提供してくれたVonCに感謝します)。merge -Cmerge -c

于 2020-05-17T10:55:12.937 に答える
6

2021年からの更新-pは非推奨です。

--rebase-merges代わりに使用してください。

于 2021-01-26T16:15:00.753 に答える
4

--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

于 2020-10-26T18:07:32.580 に答える
3

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

git merge --edit --no-ff 開発ブランチに基づいてgitflowをフォローし、早送りせずにそれにマージする場合に便利です。

于 2018-04-08T13:12:57.353 に答える
0

コマンドはgit rebase -i HEAD~5エディターをポップアップします。指定されたコミット(この場合は5つ)が一覧表示されます。最初の列にはpick、すべてのコミットが含まれます。そのエディタでに置き換えpickreword、エディタを保存して閉じます。pick次に、gitは、変更したコミットごとにエディターをポップアップしreword、コミットメッセージを編集できるようにします。

于 2012-01-10T05:24:19.607 に答える