git:コミットメッセージのインデックスの差分をコメントとして表示する


109

ときにgit commit開くメッセージエディタは、このようなものを示して簡単な状態であります:

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Your branch is ahead of 'origin/master' by 26 commits.
#
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   Showcase/src/com/gigantt/BorderArea.mxml
#   modified:   Showcase/src/com/gigantt/Client.mxml
#   modified:   Showcase/src/com/gigantt/GraphItem.mxml
#

コミットする差分も表示するようにgitを調整するにはどうすればよいですか?長い差分かもしれませんが、それでもとても便利です。


コミットメッセージにリストされている変更が必要なのは、何をしようとしているのですか?特定のツールについて誤解しているだけで、実際の問題を回避できる場合があります。
Mark Rushakoff、2011年

1
'git log -p'で取得できないいくつかの情報を提供しますか?
Jed Schneider

12
@Mark:OPは、diffをコメント化することを望んでいます。これは、デフォルトのコメント化されたヒントのより詳細なバージョンです。@Jed:OPは、この情報をコミットメッセージテンプレートに含めたいと考えています。はいgit diff --cached、それを生成しますが、毎回必要な場合はなぜ別のコマンドを実行するのですか?
Cascabel、2011年

1
github.com/tpope/vim-fugitive/issues/149は、疑わしい場合に備えて、これを逃亡者のためにフォローしています。そうでない場合は、そうする必要があります。
lkraav、2012

回答:


149

--verbose(または-v)フラグgit commitは、コミットされる内容の差分を表示します。

git commit --verbose


3
差分はコメントアウトされていないようですが、デフォルトでコメントにする方法はありますか?
Idan K

25
差分メッセージをコメントアウトする必要はありません、アイダン。gitは、コメントであるかのようにそれらを無視することを知っています。
Brandon Rhodes

@BrandonRhodes差分を無視してgitビットtiに指示する方法 差分形式でいくつかの追加行を生成するスクリプトがありますが、最初の行から切り捨てられました
Dennis C

2
@ IdanK、diff行がコミットメッセージテンプレートでコメントアウトされない利点は、vimコードのカラーリングが追加されたdiffコンテンツで機能することです(vimにgitファイルタイプの追加がインストールされている場合)。これらの相違線がコメント化されている場合、この色付けは機能しません。
クリストファー

1
以前のコメントは無視してください。犯人は、EditorConfligプラグインが「上の行に触れないでください」という行をいじっていました。
Daniel Liuzzi

31

アランの回答に返信を投稿するのに十分な評判はありませんが、イダンと他の誰にとっても私はそれを試してみただけで、コミットメッセージのdiff行は明示的にコメント化されていません。ただし、最終的なコミットメッセージにはまだ表示されません。よろしくお願いします。

$ git commit --verbose

私のエディターで:

Feeling a bit pessimistic now.

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   README
#
diff --git a/README b/README
index af5626b..c62237e 100644
--- a/README
+++ b/README
@@ -1 +1 @@
-Hello, world!
+Goodbye, world!

#前の差分行がないことに注意してください)

そして実際のコミットメッセージ:

$ git log -n 1
commit ad21a2655ef6d8173c2df08dc9893055b26bc068
Author: Tom Jakubowski <tom@crystae.net>
Date:   Thu Oct 27 19:12:54 2011 -0700

    Feeling a bit pessimistic now.

もちろん、git showまだ差分が表示されますが、それは常にコミットに対して行われるためです。:)


2
gitの新しいバージョン(2.3を持っています)では、diffの前に次の行が追加されます。# ------------------------ >8 -------------------------gitは、その後に表示されるすべてを自動的に削除すると想定しています。
JanWarchoł2015年

少なくとも2.4.1以降、次のように表示されます:#------------------------> 8 ------------ ------------#上の行には触れないでください。#以下のすべてが削除されます。これはあなたが考えていたことを裏付けるものです。
Anthony Panozzo、2015年

@AnthonyPanozzo 2.5.3では壊れているようです。「上の行に触れないでください」マーカーにもかかわらず、完全なdiffはとにかくコミットメッセージで終わります。
Daniel Liuzzi

2.8.2で機能する
Anthony Panozzo

3
コマンドラインからこれを設定するには:git config --global commit.verbose true
テイラーEdmiston

10

この動作が常に存在することを確認する最も簡単な方法は、このセクションをgit configファイルに追加することです。

[commit]
  verbose = true

(構文の強調表示のために)実際にdiffモードで表示するようにエディターを構成する必要がある場合があります。Windowsのメモ帳の代わりにNotepad2を使用し、-s diff配色を適切に設定します(削除された行などは赤):

[core]
  editor = C:/Windows/system32/notepad.exe -s diff

9

次の行を.git / hooks / prepare-commit-msgに入れて、コメント化された差分を取得します。

#!/bin/bash

if [ "$2" == "" ] ; then
    git diff --staged -p --stat 2> /dev/null | awk '{ printf "#"; print}' >> "$1"  2>/dev/null
fi

このようにして、diffをコメント化するだけでなく、(statオプションのように)より多くの情報を追加することもできます。

編集:また、git commit --verboseには、#なしでこのように実行されるコミットメッセージの差分は含まれません。


4
コメントの代わりに使用# ------------------------ >8 ------------------------できますgit-scm.com/docs/git-commit#git-commit-scissors
AB

8

コミットするときに常に差分を表示したい場合は、~/.gitconfigファイルに以下を追加できます。

[alias]
commit = commit -v

できますが、どのバージョンのgitを使用していますか?これはバージョン2.0.0で動作します
錆びた

2
あなたの答えは有望に見えますが、私にとってもうまくいきません。私が試したところgit config --global alias.commit 'commit -v'、あなたが提案したように、自動的にエイリアスが追加されました。という名前の別のエイリアスを作成しましたcv。Ubuntu 15.10にパッケージ化されている私のgitバージョンは2.5.0です。
DanielBöhmer、2016

6
コマンドラインからこれを設定するには:git config --global commit.verbose true
テイラーEdmiston
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.