ดูความแตกต่างระหว่างสถานะปัจจุบันและคอมมิตสุดท้าย


93

บางครั้งเมื่อฉันกำลังจะทำการคอมมิตฉันจำไม่ได้ว่ามีอะไรเปลี่ยนแปลงไปบ้างตั้งแต่ครั้งสุดท้าย ฉันจะเห็นความแตกต่างของสถานะปัจจุบันของรหัสและการคอมมิตล่าสุดได้อย่างไร

คำตอบ:


113

หากคุณยังไม่ได้เพิ่มไฟล์ใด ๆ ลงในดัชนี (ด้วยgit add) ให้ทำ

git diff

สิ่งนี้จะแสดงความแตกต่างระหว่างแผนผังการทำงานและดัชนีของคุณ

หากคุณได้เพิ่มไฟล์ลงในดัชนีคุณต้องทำเช่นนี้เพื่อแสดงความแตกต่างระหว่างดัชนีและการกระทำสุดท้าย (HEAD)

git diff --cached

สุดท้ายหากคุณต้องการดูการเปลี่ยนแปลงที่เกิดขึ้นในโครงสร้างการทำงานเทียบกับการกระทำล่าสุด ( HEAD) คุณสามารถทำได้ (ตามที่คาร์ลอสชี้ให้เห็น)

git diff HEAD

การเปลี่ยนแปลงเหล่านี้คือการรวมกันของและgit diffgit diff --cached


2
git diffเปรียบเทียบ worktree กับดัชนีไม่ใช่ HEAD
Carlos Martín Nieto

@ CarlosMartínNietoคุณถูกต้องครับ ฉันได้ปรับปรุงโพสต์ของฉันเพื่อแสดงถึงสิ่งนี้
Klas Mellbourn

ฉันเรียกใช้ แต่เทอร์มินัลไม่สิ้นสุดฉันจะออกได้อย่างไร? ไม่มีอะไรทำงาน
Francisco Corrales Morales

@KlasMellbourn เป็นไปได้ไหมgit diffที่สถานะของดัชนีและการกระทำก่อนหน้าในข้อความที่แตกต่างกัน?
alpha_989

2
คิดออกแล้วgit diff --cached HEAD^:)
alpha_989

33

หากคุณเพิ่งทำการคอมมิตหรือต้องการดูว่ามีการเปลี่ยนแปลงอะไรในการคอมมิตล่าสุดเทียบกับสถานะปัจจุบัน (สมมติว่าคุณมีโครงสร้างการทำงานที่สะอาด) คุณสามารถใช้:

git diff HEAD^

สิ่งนี้จะเปรียบเทียบ HEAD กับการกระทำก่อนหน้านี้ทันที หนึ่งสามารถทำได้

git diff HEAD^^

เพื่อเปรียบเทียบกับสถานะการเล่น 2 คอมมิตที่ผ่านมา หากต้องการดูความแตกต่างระหว่างสถานะปัจจุบันและการกระทำบางอย่างให้ทำดังนี้

git diff b6af6qc

ในกรณีที่b6af6qcเป็นตัวอย่างของหนึ่งกระทำกัญชา


3
การเตรียมพร้อมสำหรับคอมไพล์เวอร์ชัน Windows cmd - คุณต้องหลีกเลี่ยงอักขระคาเร็ต (^) ด้วยเครื่องหมายคาเร็ตเอง ดังนั้น "git diff HEAD ^" จะเป็น "git diff HEAD ^^" ในทำนองเดียวกัน "HEAD ^^" จะถูกป้อนเป็น "HEAD ^^^^"
Eellor

1
ในคำตอบนี้ฉันคิดว่ามันค่อนข้างไม่ชัดเจนว่า "การกระทำครั้งสุดท้าย" หมายถึงอะไร HEAD^คือคอมมิตก่อนคอมมิตล่าสุด
Klas Mellbourn

3

คุณขอให้คอมไพล์ต่างค่าคอมมิตปัจจุบัน / สุดท้ายซึ่งมีชวเลขของHEAD.

ดังนั้นgit diff HEADจะเปรียบเทียบสถานะปัจจุบันของ worktree กับคอมมิตปัจจุบัน


3

สิ่งนี้ยังแสดงให้เห็นถึงความแตกต่างและไฟล์ใดบ้างที่มีการเปลี่ยนแปลง / แก้ไข

$ git status 

แสดงพา ธ ที่มีความแตกต่างระหว่างไฟล์ดัชนีและการคอมมิต HEAD ปัจจุบันพา ธ ที่มีความแตกต่างระหว่างแผนผังการทำงานและไฟล์ดัชนีและพา ธ ในแผนผังการทำงานที่ไม่ถูกติดตามโดย git (และ gitignore ไม่ถูกละเว้น (5) ). อย่างแรกคือสิ่งที่คุณจะกระทำโดยเรียกใช้คอมมิต; อันที่สองและสามคือสิ่งที่คุณสามารถกระทำได้โดยการรัน git add ก่อนที่จะรันคอมมิตคอมไพล์

https://www.kernel.org/pub/software/scm/git/docs/git-status.html


2

สิ่งนี้ใช้ได้กับฉันด้วย:

# The last one
git diff HEAD~1 HEAD

# The last but one, etc...
git diff HEAD~2 HEAD~1

โดยปกติจะใช้ได้กับประวัติเชิงเส้น สิ่งนี้อาจยุ่งยากมากขึ้นหากมีการรวมคอมมิตด้วย ฉันขอแนะนำให้คุณดูเอกสารนี้เพื่อรับคำอธิบายที่ดีและสมบูรณ์โดยเฉพาะตัวอย่างภาพประกอบต้นไม้:

https://git-scm.com/docs/gitrevisions

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