マージを実行して競合を解決した後、コマンドラインからデフォルトで生成されたコミットメッセージを受け入れる「簡単な」方法はありますか?開発者の1人がすべての競合を解決してから、git commit -m"Merge Commit"
は、すべての競合ファイルをリストした生成されたコミットメッセージを置き換えます。現在のファイルを変更せずに取得する別のフラグが必要です。 -Fまたは--file =オプションがあることは知っていますが、そのためには常にファイル名を知っている必要があります。
ありがとうございました
明らかに、ここでの「正しい」答えは、開発者がマージコミットを生成するときにチームの正しいプラクティスに従うようにすることです。使用したい動作がデフォルトであり、最近ではgitがマージのために「人間が生成した」コミットメッセージを要求し始めていることに注意してください。それには理由があり、開発者が無意味なメッセージでプロセスを短絡させることはありませんでした。
開発者は、代わりにリベースする必要があるときにマージコミットを生成している可能性がありますか?
ただし、マージコミットはgit fmt-merge-msg
の出力であり、マージコミットの親にフィードする必要があります。
ドキュメント ごとに、この単純なコマンドを試したところ、うまくいきました:
git commit --no-edit
その後、git log
を実行して、デフォルトのメッセージが使用されたことを確認します。
デフォルトでは、マージが失敗すると、使用されるコミットメッセージはgitフォルダーのファイル(通常は.git/MERGE_MSG
)に保存されます。競合が解決された後、git commit
を実行すると、この保存されたメッセージがデフォルトのエディターに送られます。
メッセージがそれ自体でピックアップされていない場合、ファイルからコミットメッセージを読み取る--file
オプションを使用してgitコマンドにフィードできます。
git commit --file .git/MERGE_MSG
何もしないコマンドにエディターを設定するだけです:
GIT_EDITOR=true git commit
_git commit --file .git/MERGE_MSG
_は既に述べたように問題ありませんが、いくつかの点を無視します:
.git
_ディレクトリはなく、ファイル_.git
_があります。オプションで:
MERGE_MSG
_には、競合のあるファイルに関する情報が含まれています。最初の2つのポイントは、_git rev-parse
_で使用できます。
_git commit -F "$(git rev-parse --git-dir)/MERGE_MSG"
_
または、代わりに、Gitエイリアスを使用します。
_commit-merge = !cat $(git rev-parse --git-dir)/MERGE_MSG | git commit -F -
_
これは、「通常の」リポジトリとサブモジュールの両方で機能します。 _#
_-マークの競合マーカーを破棄する必要がある場合、簡単にするために、マージメッセージの最初の行のみを取得できます。
_git commit -m $(head -1 $(git rev-parse --git-dir)/MERGE_MSG)
_
または別のエイリアス:
_commit-merge = !head -1 $(git rev-parse --git-dir)/MERGE_MSG | git commit -F -
_
エイリアスで_-F
_キーを使用する必要があったのは、bashを使用して生成されたコマンドでGitに処理される引用符を発行させることができなかったためです(そうでない場合、_git commit
_はマージ中の部分コミットに対して文句を言います)。
リリース済み 2日前のGit 2.12.0では、_git merge --continue
_が導入され、マージ中に競合が発生したときに停止したマージコミットが行われます。サブモジュールでも同様に動作しますが、少なくとも_--no-edit
_は受け入れないため、エディターはマージを完了する前にコミットメッセージを変更することをお勧めします。
このルールを本当に実行したい場合は、gitフックを使用してこれを強制する方法があるかもしれません。
マージの競合が発生するたびに、「combined diff」により、競合したファイルが表示されます:git diff HEAD HEAD^1 HEAD^2 --name-only
。技術的には、結合されたdiffが競合するものよりもmoreファイルを表示できるかどうかはわかりません。
しかし、私たちが望むように動作すると仮定すると(これは仮定です)、git commit-msg
メッセージをチェックするフックユーザーが入力したとアサート
これらの条件が失敗した場合は、スクリプトを印刷して問題点の説明を表示させ、ゼロ以外を返してコミットを中止します。開発者にこのコミットフックをインストールさせるか、サーバーにインストールして確実に強制することができます。