git: Kaydetme mesajında ​​açıklama olarak indeks farkını göster


109

Ne zaman git commitaçık mesaj editörü gösterileri kısa durumu, böyle bir şey olur:

# 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'i işlenecek farkı da gösterecek şekilde nasıl ayarlayabilirim? Uzun bir fark olabileceğinin farkındayım, ama yine de .. çok kullanışlı.


Kaydetme mesajında ​​listelenen değişikliklere ihtiyaç duymanız için ne yapmaya çalışıyorsunuz? Sadece belirli bir araçla ilgili yanlış bir anlayışınız olabilir ve gerçek sorunu çözmenize yardımcı olabiliriz.
Mark Rushakoff

1
bu size 'git log -p' ile elde edemeyeceğiniz bazı bilgiler sağlıyor mu?
Jed Schneider

12
@Mark: OP, farkın yorumlanmasını istiyor. Varsayılan yorumlu ipucunun daha ayrıntılı bir sürümüdür. @Jed: OP bu bilgiyi işlem mesajı şablonunda istiyor. Evet git diff --cachedonu üretir, ancak her seferinde istiyorsanız neden ayrı bir komut çalıştırasınız?
Cascabel

1
github.com/tpope/vim-fugitive/issues/149 , merak ediyorsanız kaçak için bunu takip ediyor. Eğer değilseniz, olmalısınız.
lkraav

Yanıtlar:


149

--verbose(Veya -viçin) bayrağı git commitkararlı olduğunu ne diff görüntüler:

git commit --verbose


3
Görünüşe göre fark yorumlanmıyor, varsayılan olarak bir yorum yapmanın bir yolu var mı?
Idan K

25
Diff mesajlarının yorumlanmasına gerek yoktur, Idan; git onları yorummuş gibi görmezden gelmeyi bilir.
Brandon Rhodes

@BrandonRhodes Git bit ti'nin diff'i göz ardı etmesi nasıl söylenir? Ben fark formatta birkaç ekleme hatları oluşturmak için komut dosyası ettik, ama ilk satırından kesilmiş var
Dennis C

2
@IdanK, diff satırlarının commit mesajı şablonunda yorumlanmamasının bir yararı, vim kod renklendirmesinin eklenen diff içeriği üzerinde çalışmasıdır (vim için git dosya türü eklemeleri yüklediyseniz). Bu fark çizgileri yorumlansaydı, bu renklendirme işe yaramazdı.
Christopher

1
Önceki yorumumu dikkate almayın; Suçlu, EditorConflig eklentisinin "Yukarıdaki çizgiye dokunmayın" satırıyla uğraşmasıydı.
Daniel Liuzzi

31

Alan'ın cevabına bir cevap göndermek için yeterli itibar yok, ancak Idan ve başka biri için az önce denedim ve commit mesajındaki diff satırları açıkça yorumlanmadı. Ancak yine de son taahhüt mesajında ​​görünmüyorlar, şükürler olsun.

$ git commit --verbose

Editörümde:

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!

( #fark satırlarının önünde olmamasına dikkat edin )

Ve sonra gerçek commit mesajı:

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

Açıkçası, git showfarkı yine de gösterecek, ancak bunun nedeni her zaman commit'ler için geçerli olmasıdır. :)


2
Git'in yeni sürümlerinde (2.3'e sahibim) fark, aşağıdaki satırla önek olarak gelir: # ------------------------ >8 ------------------------- git'in kendisinden sonra görünen her şeyi otomatik olarak kaldıracağını varsayıyorum.
Jan Warchoł

En az 2.4.1 itibariyle şunu görüyorum: # ------------------------> 8 ------------ ------------ # Yukarıdaki çizgiye dokunmayın. # Aşağıdaki her şey kaldırılacaktır. Bu, ne düşündüğünüzü doğrular.
Anthony Panozzo

@AnthonyPanozzo Bu, 2.5.3'te bozuk görünüyor. "Yukarıdaki satıra dokunmayın" işaretine rağmen, tam fark yine de commit mesajında ​​son bulur.
Daniel Liuzzi

Benim için çalışıyor 2.8.2
Anthony Panozzo

3
Bunu komut satırından ayarlamak için:git config --global commit.verbose true
Taylor Edmiston

10

Bu davranışın her zaman mevcut olduğundan emin olmanın en basit yolu, bu bölümü git configdosyanıza eklemektir :

[commit]
  verbose = true

Düzenleyicinizi gerçekte fark modunda görüntülenecek şekilde yapılandırmanız gerekebilir (sözdizimi vurgulama için). Notepad2'yi Windows Notepad yedeği olarak kullanıyorum ve -s diffrenk düzenini uygun şekilde ayarlıyorum (silinen satırlar için kırmızı vb.):

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

9

Yorumlanmış bir fark almak için aşağıdaki satırları .git / hooks / ready-commit-msg içine koydum :

#!/bin/bash

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

Bu şekilde, yalnızca farklılığı yorumlamakla kalmaz, aynı zamanda daha fazla bilgi de ekleyebilirsiniz ( istatistik seçeneğinin yaptığı gibi).

Düzenleme: Ayrıca git commit --verbose , commit mesajına diff içermez, bu yol #s olmadan yapacaktır.


4
Yorum yazmak yerine # ------------------------ >8 ------------------------daha fazlasını bulabilirsiniz git-scm.com/docs/git-commit#git-commit-scissors
AB

8

Kaydettiğinizde farkı her zaman görmek istiyorsanız ~/.gitconfigdosyanıza aşağıdakileri ekleyebilirsiniz :

[alias]
commit = commit -v

Yine de yapabilirsiniz - git'in hangi sürümünü kullanıyorsunuz? Bu benim için çalışıyor 2.0.0 sürümüyle
paslı

2
Cevabınız umut verici görünüyor ama benim için de işe yaramıyor. Denedim git config --global alias.commit 'commit -v've takma ad önerdiğiniz gibi eklendi - sadece otomatik olarak. cvBeklendiği gibi çalışan başka bir takma ad oluşturdum . Git sürümüm Ubuntu 15.10'da paketlenmiş 2.5.0.
Daniel Böhmer

6
Bunu komut satırından ayarlamak için:git config --global commit.verbose true
Taylor Edmiston
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.