เมื่อฉันgit diff COMMIT
ฉันเห็นการเปลี่ยนแปลงระหว่างความมุ่งมั่นนั้นและส่วนหัว (เท่าที่ฉันรู้) แต่ฉันอยากเห็นการเปลี่ยนแปลงที่เกิดขึ้นจากความมุ่งมั่นนั้น
ฉันไม่พบตัวเลือกที่ชัดเจนในdiff
/ log
ที่จะให้ผลลัพธ์นั้นกับฉัน
เมื่อฉันgit diff COMMIT
ฉันเห็นการเปลี่ยนแปลงระหว่างความมุ่งมั่นนั้นและส่วนหัว (เท่าที่ฉันรู้) แต่ฉันอยากเห็นการเปลี่ยนแปลงที่เกิดขึ้นจากความมุ่งมั่นนั้น
ฉันไม่พบตัวเลือกที่ชัดเจนในdiff
/ log
ที่จะให้ผลลัพธ์นั้นกับฉัน
คำตอบ:
หากต้องการดูความแตกต่างของCOMMIT
แฮชเฉพาะ :
git diff COMMIT~ COMMIT
จะแสดงความแตกต่างระหว่างCOMMIT
บรรพบุรุษของCOMMIT
คุณกับ ดู man page สำหรับgit diffสำหรับรายละเอียดเกี่ยวกับคำสั่งและgitrevisionsเกี่ยวกับ~
สัญกรณ์และเพื่อนของมัน
หรือgit show COMMIT
จะทำสิ่งที่คล้ายกันมาก (กระทำข้อมูลซึ่งรวมถึงความแตกต่างของ -. แต่ไม่กระทำการผสาน) ดูmanpage คอมไพล์โชว์
^
จะต้องมีการเสนอราคาในเชลล์ Thomson และ Bourne (คำพ้องความหมายที่|
นั่น) และrc
อนุพันธ์ของมัน (ผู้ประกอบการดูแล) และzsh
ด้วยการเปิดใช้งาน Extendedglob ( not
โอเปอเรเตอร์
HEAD^
หมายถึงผู้ปกครองคนแรกในกรณีที่กระทำมีหลายผู้ปกครอง (เช่นผสานกระทำ)
git diff COMMIT~ COMMIT
ใช้งานได้สำหรับฉันสังเกตเครื่องหมายตัวหนอนแทนเครื่องหมายรูปหมวก ฉันใช้ git เวอร์ชัน 2.6.1.windows.1 บน Windows 10
ดังที่กล่าวไว้ใน " ชวเลขสำหรับความแตกต่างของคอมไพล์กับแม่ของมัน? " คุณยังสามารถใช้git diff
กับ:
git diff COMMIT^!
หรือ
git diff-tree -p COMMIT
ด้วยการแสดง git คุณจะต้อง (เพื่อมุ่งเน้น diff คนเดียว) ทำ:
git show --color --pretty=format:%b $COMMIT
COMMIT
พารามิเตอร์เป็นish กระทำ- :
กระทำวัตถุหรือวัตถุที่สามารถ dereferenced ซ้ำการกระทำวัตถุ ต่อไปนี้คือการกระทำ - ishes ทั้งหมด: วัตถุการกระทำวัตถุแท็กที่ชี้ไปที่วัตถุที่กระทำวัตถุแท็กที่ชี้ไปที่วัตถุแท็กที่ชี้ไปที่วัตถุกระทำ ฯลฯ
ดูgitrevision "การกำหนด REVISIONS"เพื่ออ้างอิงการกระทำ
ดูเพิ่มเติม " tree-ish มีความหมายอย่างไรใน Git "
คุณสามารถลองวิธีนี้ได้ง่ายๆ:
git show <COMMIT>
git show
แสดงให้เห็นถึงการเปลี่ยนแปลงที่เกิดขึ้นในการกระทำล่าสุด
git show HEAD
เทียบเท่า
git show HEAD~1
นำคุณกลับ 1 ข้อ
ฉันมักจะทำ:
git diff HEAD~1
เพื่อแสดงการเปลี่ยนแปลงที่เกี่ยวข้องกับการกระทำครั้งสุดท้าย หากคุณมีภาระผูกพันเพิ่มขึ้นเพียงเพิ่มหมายเลข 1 ให้เป็นจำนวนการผูกที่คุณต้องการดู
ก่อนอื่นให้รับ ID การยอมรับโดยใช้
git log #to list all
หรือ
git log -p -1 #last one commit id
คัดลอกรหัสกระทำ
ตอนนี้เราใช้สองวิธีเพื่อแสดงรายการการเปลี่ยนแปลงจากการกระทำที่เจาะจง
วิธีที่ 1:
git diff commit_id^! #commit id something like this 1c6a6000asad012
วิธีที่ 2:
git show commit_id
For example: git show 1c6a600a
^!
หมายถึง ??
git show <commit_sha>
สิ่งนี้จะแสดงให้คุณเห็นว่ามีอะไรเกิดขึ้นบ้าง ฉันคิดว่าคุณสามารถทำช่วงได้โดยเพียงแค่ใส่ช่องว่างระหว่างสองกระทำ shas
git show <beginning_sha> <ending_sha>
ซึ่งค่อนข้างมีประโยชน์หากคุณรีบูตบ่อยๆเพราะบันทึกคุณสมบัติของคุณจะอยู่ในแถว
จากหน้าคนสำหรับgit-diff (1) :
git diff [options] [<commit>] [--] [<path>…]
git diff [options] --cached [<commit>] [--] [<path>…]
git diff [options] <commit> <commit> [--] [<path>…]
git diff [options] <blob> <blob>
git diff [options] [--no-index] [--] <path> <path>
ใช้อันที่ 3 ตรงกลาง:
git diff [options] <parent-commit> <commit>
รวมทั้งจากหน้าคนเดียวกันที่ด้านล่างในส่วนตัวอย่าง :
$ git diff HEAD^ HEAD <3>
เปรียบเทียบเวอร์ชันก่อนคอมมิทล่าสุดและคอมมิทล่าสุด
เป็นที่ทราบกันดีว่ามันเป็นคำที่สับสนเล็กน้อย
เปรียบเทียบการคอมมิชชันล่าสุดกับการคอมมิทก่อนหน้า
git diff HEAD HEAD^
ของคุณจะนำไปใช้
ดูเหมือนว่าต่อไปนี้จะทำงาน; ฉันใช้มันเพื่อแสดงสิ่งที่ถูกผสานเข้าด้วยกัน
git whatchanged -m -n 1 -p <SHA-1 hash of merge commit>
git log
หรือไม่ (เพราะstackoverflow.com/a/18585297/6309 )
ความเป็นไปได้อื่น:
git log -p COMMIT -1
คุณสามารถใช้git diff HEAD HEAD^1
เพื่อดูความแตกต่างกับการกระทำหลัก
หากคุณต้องการเห็นรายการไฟล์เท่านั้นให้เพิ่ม--stat
ตัวเลือก
diff
คำสั่งคือสิ่งที่ฉันจะต้องมีการเปลี่ยนแปลงในแฟ้มที่จะได้รับจากการกระทำHEAD
ที่จะกระทำHEAD^1
?
git difftool COMMIT^ <commit hash>
เป็นไปได้เช่นกันหากคุณกำหนดค่า difftool ของคุณ
ดูที่นี่วิธีกำหนดค่า difftool หรือหน้าคู่มือได้ที่นี่
นอกจากนี้คุณสามารถใช้git diff-tree --no-commit-id --name-only -r <commit hash>
เพื่อดูว่าไฟล์ใดที่ถูกเปลี่ยนแปลง / ถูกคอมมิตในแฮชการคอมมิต
ฉันชอบคำสั่งด้านล่างเพื่อเปรียบเทียบการกระทำที่เฉพาะเจาะจงและการกระทำที่ผ่านมา:
git diff <commit-hash>^-
ตัวอย่าง:
git diff cd1b3f485^-
git show COMMIT
หากต้องการดูผู้เขียนและเวลาโดยการกระทำการใช้งาน ซึ่งจะส่งผลดังนี้:
commit 13414df70354678b1b9304ebe4b6d204810f867e
Merge: a2a2894 3a1ba8f
Author: You <you@you.com>
Date: Fri Jul 24 17:46:42 2015 -0700
Merge remote-tracking branch 'origin/your-feature'
git diff --stat a2a2894 3a1ba8f
หากคุณต้องการที่จะเห็นไฟล์ที่ได้รับการเปลี่ยนแปลงให้ดำเนินการดังต่อไปนี้ด้วยค่าจากบรรทัดผสานดังกล่าวข้างต้น
หากคุณต้องการดู diff ที่แท้จริงให้เรียกใช้ git --stat a2a2894 3a1ba8f
git --stat a2a2894 3a1ba8f
". ฉันคิดว่าคุณหมายถึงหรืออื่น ๆgit diff a2a2894 3a1ba8f
unknown option: --stat
สำหรับการตรวจสอบการเปลี่ยนแปลงทั้งหมด:
git diff <commit_Id_1> <commit_Id_2>
สำหรับการตรวจสอบเฉพาะไฟล์ที่มีการเปลี่ยนแปลง / เพิ่ม / ลบ:
git diff <commit_Id_1> <commit_Id_2> --name-only
หมายเหตุ : สำหรับการตรวจสอบความแตกต่างโดยไม่ต้องกระทำคุณไม่จำเป็นต้องใส่รหัสยืนยัน
ฉันใช้ Git เวอร์ชัน 2.6.1.windows.1 บน Windows 10 ดังนั้นฉันต้องการการแก้ไขเล็กน้อยเพื่อคำตอบของ Nevik (tilde แทนที่จะเป็น caret):
git diff COMMIT~ COMMIT
ตัวเลือกอื่นคือการพูดเครื่องหมายตกหลุม:
git diff "COMMIT^" COMMIT
คำสั่งนี้จะทำให้คุณได้รับแฮช parent-hash:
git log -n 2 <commit-hash>
หลังจากนั้น git diff-tool <commit-hash> <parent-commit-hash>
ตัวอย่าง:
bonnie@bonnie ~/ $ git log -n 2 7f65b9a9d3820525766fcba285b3c678e889fe3
commit 7f65b9a9d3820525766fcba285b3c678e889fe3b
Author: souparno <souparno.majumder@gmail.com>
Date: Mon Jul 25 13:17:07 2016 +0530
CSS changed to maintain the aspect ratio of the channel logos and to fit them properly.
commit c3a61f17e14e2b80cf64b172a45f1b4826ee291f
Author: souparno <souparno.majumder@gmail.com>
Date: Mon Jul 25 11:28:09 2016 +0530
The ratio of the height to width of the channel images are maintained.
หลังจากนี้
git difftool 7f65b9a9d3820525766fcba285b3c678e889fe3b c3a61f17e14e2b80cf64b172a45f1b4826ee291f
หากคุณเพียงแค่ต้องการเห็นการเปลี่ยนแปลงในการกระทำล่าสุดก็git show
จะให้คุณ
ในกรณีที่ตรวจสอบการเปลี่ยนแปลงของแหล่งที่มาในมุมมองกราฟิก
$gitk (Mention your commit id here)
ตัวอย่างเช่น:
$gitk HEAD~1