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
#

ฉันจะปรับแต่งคอมไพล์เพื่อแสดงความแตกต่างที่จะมุ่งมั่นได้อย่างไร ฉันรู้ว่ามันอาจจะแตกต่างไปนาน แต่ก็ยัง .. มีประโยชน์มาก


คุณกำลังพยายามทำอะไรเพื่อที่คุณต้องการการเปลี่ยนแปลงที่ระบุไว้ในข้อความคอมมิต คุณอาจมีความเข้าใจผิดกับเครื่องมือบางอย่างและเราอาจช่วยคุณแก้ไขปัญหาที่เกิดขึ้นจริงได้
Mark Rushakoff

1
ให้ข้อมูลบางอย่างที่คุณไม่ได้รับจาก 'git log -p' หรือไม่?
Jed Schneider

12
@ มาร์ค: OP ต้องการความคิดเห็นที่แตกต่างออกไป เป็นคำใบ้ที่แสดงความคิดเห็นเริ่มต้นในเวอร์ชันที่ละเอียดมากขึ้น @Jed: OP ต้องการข้อมูลนี้ในเทมเพลตข้อความคอมมิต ใช่git diff --cachedสร้างมันขึ้นมา แต่ทำไมต้องเรียกใช้คำสั่งแยกต่างหากถ้าคุณต้องการทุกครั้ง?
Cascabel

1
github.com/tpope/vim-fugitive/issues/149กำลังติดตามสิ่งนี้สำหรับผู้ลี้ภัยในกรณีที่คุณสงสัย ถ้าคุณไม่ใช่คุณควรจะเป็น
lkraav

คำตอบ:


149

--verbose(หรือ-v) ธงgit commitจะแสดงความแตกต่างของสิ่งที่จะต้องมุ่งมั่นไปนี้:

git commit --verbose


3
ดูเหมือนว่าความแตกต่างจะไม่ถูกแสดงความคิดเห็นมีวิธีใดที่จะทำให้เป็นความคิดเห็นโดยค่าเริ่มต้น?
Idan K

25
ข้อความที่แตกต่างไม่จำเป็นต้องแสดงความคิดเห็น Idan; git รู้จักที่จะเพิกเฉยต่อพวกเขาราวกับว่าเป็นความคิดเห็น
Brandon Rhodes

@BrandonRhodes วิธีการบอก git bit ti ละเว้นความแตกต่าง? ฉันมีสคริปต์สำหรับสร้างบรรทัดเพิ่มเติมสองสามบรรทัดในรูปแบบที่แตกต่างกัน แต่มันถูกตัดทอนจากบรรทัดแรก
Dennis C

2
@IdanK ข้อดีของการแตกต่างบรรทัดที่ไม่ได้แสดงความคิดเห็นในเทมเพลตข้อความคอมมิตคือการระบายสีรหัสกลุ่มจะทำงานบนเนื้อหาที่แตกต่างที่เพิ่มเข้ามา (หากคุณติดตั้งส่วนเพิ่มประเภทไฟล์ git สำหรับกลุ่ม) หากมีการแสดงความคิดเห็นในบรรทัดที่แตกต่างกันการระบายสีนี้จะไม่ทำงาน
Christopher

1
ไม่สนใจความคิดเห็นก่อนหน้าของฉัน ผู้ร้ายคือปลั๊กอิน EditorConflig ที่ยุ่งกับบรรทัด "ห้ามแตะบรรทัดด้านบน"
Daniel Liuzzi

31

ชื่อเสียงไม่เพียงพอที่จะโพสต์ตอบกลับคำตอบของ Alan แต่สำหรับ Idan และคนอื่น ๆ ฉันเพิ่งลองใช้และบรรทัดที่แตกต่างในข้อความคอมมิตไม่ได้แสดงความคิดเห็นอย่างชัดเจน อย่างไรก็ตามพวกเขายังไม่ปรากฏในข้อความสุดท้ายขอบคุณพระเจ้า

$ 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 จะลบทุกอย่างที่ปรากฏหลังจากนั้นโดยอัตโนมัติ
Jan Warchoł

อย่างน้อย 2.4.1 ฉันเห็น: # ------------------------> 8 ------------ ------------ # ห้ามจับเส้นข้างบน # ทุกอย่างด้านล่างจะถูกลบออก ดังนั้นนี่เป็นการยืนยันสิ่งที่คุณคิด
Anthony Panozzo

@AnthonyPanozzo นี่ดูเหมือนจะพังเมื่อ 2.5.3 แม้จะมีเครื่องหมาย "Do not touch the line above" แต่ค่าความแตกต่างทั้งหมดจะสิ้นสุดในข้อความคอมมิต
Daniel Liuzzi

ทำงานให้ฉันใน 2.8.2
Anthony Panozzo

3
หากต้องการตั้งค่านี้จากบรรทัดคำสั่ง:git config --global commit.verbose true
Taylor Edmiston

10

วิธีที่ง่ายที่สุดในการตรวจสอบให้แน่ใจว่ามีพฤติกรรมนี้อยู่เสมอคือเพิ่มส่วนนี้ลงในgit configไฟล์ของคุณ:

[commit]
  verbose = true

คุณอาจต้องกำหนดค่าตัวแก้ไขของคุณให้แสดงในโหมด diff (สำหรับการเน้นไวยากรณ์) ฉันใช้ Notepad2 เป็นตัวเปลี่ยน Notepad ของ Windows และ-s diffตั้งค่าโทนสีให้เหมาะสม (สีแดงสำหรับเส้นที่ถูกลบ ฯลฯ ):

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

9

ฉันได้ใส่บรรทัดต่อไปนี้ใน. git / hooks / จัดเตรียมคอมมิต-msgเพื่อแสดงความคิดเห็นต่าง:

#!/bin/bash

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

ด้วยวิธีนี้คุณไม่เพียงสามารถแสดงความคิดเห็นเกี่ยวกับความแตกต่าง แต่ยังเพิ่มข้อมูลเพิ่มเติม (เช่นเดียวกับตัวเลือกstat )

แก้ไข: คอมมิตคอมมิตด้วย --verboseไม่รวมความแตกต่างของข้อความคอมมิตด้วยวิธีนี้หากไม่มี #s


4
แทนที่จะแสดงความคิดเห็นคุณสามารถใช้# ------------------------ >8 ------------------------เพิ่มเติมได้ที่git-scm.com/docs/git-commit#git-commit-scissors
AB

8

หากคุณต้องการเห็นความแตกต่างเสมอเมื่อคุณคอมมิตคุณสามารถเพิ่มสิ่งต่อไปนี้ลงใน~/.gitconfigไฟล์ของคุณ:

[alias]
commit = commit -v

คุณทำได้ - คุณใช้คอมไพล์เวอร์ชันใด สิ่งนี้ใช้ได้กับฉันด้วยเวอร์ชัน 2.0.0
สนิม

2
คำตอบของคุณดูมีแนวโน้ม แต่ก็ไม่ได้ผลสำหรับฉันเช่นกัน ฉันลองgit config --global alias.commit 'commit -v'แล้วและมีการเพิ่มนามแฝงตามที่คุณแนะนำโดยอัตโนมัติ ฉันสร้างนามแฝงอื่นcvที่ใช้งานได้ตามที่คาดไว้ เวอร์ชัน git ของฉันคือ 2.5.0 ตามที่บรรจุใน Ubuntu 15.10
Daniel Böhmer

6
หากต้องการตั้งค่านี้จากบรรทัดคำสั่ง:git config --global commit.verbose true
Taylor Edmiston
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.