76

マージを実行して競合を解決した後、デフォルトで生成されたコミット メッセージをコマンド ラインから受け入れる「簡単な」方法はありますか? 開発者の 1 人がすべての競合を解決しgit commit -m"Merge Commit"、生成されたすべての競合ファイルをリストしたコミット メッセージを置き換える処理を行います。現在のファイルを変更せずに取得する別のフラグが必要です。-F または --file= オプションがあることは知っていますが、それには常にファイル名を知っている必要があります。

ありがとうございました

4

8 に答える 8

135

docsに従って、この簡単なコマンドを試しただけでうまくいきました:

git commit --no-edit

その後、実行git logして、デフォルトのメッセージが使用されていることを確認します。

于 2016-03-23T21:57:48.150 に答える
22

デフォルトでは、マージが失敗すると、使用される予定だったコミット メッセージが git フォルダー内のファイルに保存されます.git/MERGE_MSG。競合が解決された後、実行git commitすると、この保存されたメッセージがデフォルトのエディターにフィードされます。

メッセージが単独で取得されていない場合は、オプションを使用して git コマンドにフィードすることができ--fileます。これにより、ファイルからコミット メッセージが読み取られます。

git commit --file .git/MERGE_MSG
于 2012-12-19T23:52:24.857 に答える
17

エディタを何もしないコマンドに設定するだけです:

GIT_EDITOR=true git commit
于 2012-12-19T22:23:09.213 に答える
5

明らかに、ここでの「正しい」答えは、マージ コミットを生成するときに、開発者にチームの正しいプラクティスに従うようにさせることです。必要な動作がデフォルトであったことに注意してください。最近になって、git がマージのために「人間が生成した」コミット メッセージを要求し始めたことに注意してください。それには理由があり、開発者が無意味なメッセージでプロセスを短絡させるためではありませんでした。

おそらく開発者は、代わりにリベースする必要があるときにマージコミットを生成していますか?

つまり、マージ コミットは の出力でありgit fmt-merge-msg、マージ コミットの親にフィードする必要があります。

于 2012-12-19T22:26:25.977 に答える
0

本当にこのルールを適用したい場合は、git フックを使用してこれを強制する方法があるかもしれません。

マージの競合が発生するたびに、「結合された diff」に競合したファイルが表示されます: git diff HEAD HEAD^1 HEAD^2 --name-only. 技術的に、結合された diff が競合しているファイルよりも多くのファイルを表示できるかどうかはわかりません。

しかし、それが私たちが望むように機能すると仮定すると (これは仮定です)、ユーザーが入力しcommit-msgたメッセージをチェックしてアサートするgit フックを持つことができます。

  1. これはマージコミットですか?
  2. もしそうなら、結合された差分はファイルを表示しますか?
  3. もしそうなら、文字列 "Conflicts:" の後にそれらのファイル名が続きますか?

これらの条件が満たされない場合は、スクリプトを印刷して問題の説明を画面に表示し、0 以外を返してコミットを中止します。開発者にこのコミット フックをインストールさせるか、サーバーにインストールして確実に適用することもできます。

于 2015-06-26T18:47:17.893 に答える