นอกเหนือจากการเขียนนามแฝงหรือสคริปต์แล้วยังมีคำสั่งที่สั้นกว่าสำหรับการรับส่วนต่างสำหรับการคอมมิชชันเฉพาะหรือไม่?
git diff 15dc8^..15dc8
หากคุณให้ ID การคอมมิทเพียงครั้งเดียวgit diff 15dc8
มันจะแตกต่างที่กระทำกับ HEAD
นอกเหนือจากการเขียนนามแฝงหรือสคริปต์แล้วยังมีคำสั่งที่สั้นกว่าสำหรับการรับส่วนต่างสำหรับการคอมมิชชันเฉพาะหรือไม่?
git diff 15dc8^..15dc8
หากคุณให้ ID การคอมมิทเพียงครั้งเดียวgit diff 15dc8
มันจะแตกต่างที่กระทำกับ HEAD
คำตอบ:
git show $COMMIT
ใช้ มันจะแสดงข้อความบันทึกการกระทำและส่วนต่างของการส่งข้อมูลนั้น
ใช้:
git diff 15dc8^!
ตามที่อธิบายไว้ในส่วนต่อไปของgit-rev-parse (1) manpage (หรือในgitrevisions git สมัยใหม่(7) manpage):
ชวเลขอีกสองอันสำหรับตั้งชื่อชุดที่เกิดขึ้นจากการคอมมิชชันและคอมมิทของมันจะมีอยู่ สัญกรณ์ r1 ^ @ หมายถึงผู้ปกครองทั้งหมดของ r1 r1 ^! รวมคอมมิชชัน r1 แต่ไม่รวมพาเรนต์ทั้งหมด
ซึ่งหมายความว่าคุณสามารถใช้15dc8^!
เป็นชวเลขสำหรับ15dc8^..15dc8
ทุกที่ในคอมไพล์ที่จำเป็นต้องมีการแก้ไข สำหรับคำสั่งdiffgit diff 15dc8^..15dc8
นั้นเข้าใจกันgit diff 15dc8^ 15dc8
ซึ่งหมายถึงความแตกต่างระหว่าง parent of commit ( 15dc8^
) และ commit ( 15dc8
)
หมายเหตุ : คำอธิบายในgit-rev-parse(1)
manpage พูดถึงช่วงการแก้ไขซึ่งจำเป็นต้องใช้เพื่อรวมการกระทำที่มีผู้ปกครองมากกว่าหนึ่งคน จากนั้นr1^!
คือ " r1 --not r1^@
" ie " r1 ^r1^1 ^r1^2 ...
"
นอกจากนี้คุณสามารถใช้git show COMMIT
เพื่อรับกระทำคำอธิบายและความแตกต่างสำหรับการกระทำ หากคุณต้องการความแตกต่างเพียงอย่างเดียวคุณสามารถใช้git diff-tree -p COMMIT
^!
สัญกรณ์ปกครองชวเลขการทำงานอย่างถูกต้องกับ difftool การคอมปกติ แต่ต่างจะกลับสำหรับการกระทำผสาน ทำไมเป็นเช่นนั้น
หากคุณรู้ว่าไกลแค่ไหนคุณสามารถลองทำสิ่งต่อไปนี้:
# Current branch vs. parent
git diff HEAD^ HEAD
# Current branch, diff between commits 2 and 3 times back
git diff HEAD~3 HEAD~2
ความมุ่งมั่นก่อนหน้านี้ทำงานบางอย่างเช่นนี้:
# Parent of HEAD
git show HEAD^1
# Grandparent
git show HEAD^2
มีหลายวิธีที่คุณสามารถระบุการผูกพัน:
# Great grandparent
git show HEAD~3
@mipadi ชี้ให้เห็นว่าคุณสามารถใช้งานgit show $COMMIT
ได้ แต่สิ่งนี้ยังแสดงส่วนหัวและข้อความยืนยัน หากคุณต้องการความต่างตรงให้ใช้git show --pretty=format:%b $COMMIT
ถ้าคุณต้องการความแตกต่างตรงการใช้งาน
เห็นได้ชัดว่านี่ไม่ใช่มือสั้น ๆ ดังนั้นฉันจึงใช้นามแฝงนี้เป็น. gitconfig
[alias]
sd = show --pretty=format:%b
ซึ่งจะช่วยให้ฉันไปใช้git sd $COMMIT
เพื่อแสดงให้เห็นความแตกต่าง
ตัวอย่างที่กล่าวถึงจำนวนมาก (เช่นgit diff 15dc8^!
หรือgit diff 15dc8^..15dc8
) ไม่ทำงานหากคุณใช้ zsh และมีextendedglob
ชุดตัวเลือก คุณสามารถแก้ไขได้ด้วยหนึ่งในสามวิธีต่อไปนี้:
unsetopt extendedglob
(และ / หรือลบออกจาก. zshrc)
setopt NO_NOMATCH
(และ / หรือกำหนดเป็น. zshrc)
หลบคาเร็ตและปังทุกครั้งด้วยแบ็กสแลชเช่น git diff 15dc8\^\!
git diff 15dc8 15dce~1
~ 1 หมายถึง 'parent', ~ 2 'grandparent ฯลฯ
ทางออกของพอลด้านบนทำในสิ่งที่ฉันหวังไว้
$ git diff HEAD^1
นอกจากนี้ยังมีประโยชน์ในการเพิ่มชื่อแทนเช่น hobs ที่กล่าวถึงหากคุณใส่สิ่งต่อไปนี้ในส่วน [alias] ของไฟล์ ~ / .gitconfig ของคุณคุณสามารถใช้ทางลัดเพื่อดูความแตกต่างระหว่างส่วนหัวและก่อนหน้า
[alias]
diff-last = diff HEAD^1
จากนั้นใช้$ git diff-lastจะได้ผลลัพธ์ โปรดทราบว่าสิ่งนี้จะรวมถึงการเปลี่ยนแปลงใด ๆ ที่คุณยังไม่ได้กระทำรวมถึงความแตกต่างระหว่างการกระทำ หากคุณต้องการเพิกเฉยต่อการเปลี่ยนแปลงที่คุณยังไม่ได้ทำคุณสามารถใช้ diff เพื่อเปรียบเทียบ HEAD กับพาเรนต์โดยตรง:
$ git diff HEAD^1 HEAD
ใช้ชื่อแทนดังนั้นไม่ตอบคำถามของคุณอย่างแน่นอน แต่ฉันพบว่ามีประโยชน์เหล่านี้สำหรับการทำสิ่งที่คุณตั้งใจ ...
alias gitdiff-1="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 2|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git diff"
alias gitdiff-2="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 3|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git diff"
alias gitdiff-3="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 4|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git diff"
alias gitlog-1="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 2|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git log --summary"
alias gitlog-2="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 3|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git log --summary"
alias gitlog-3="git log --reverse|grep commit|cut -d ' ' -f2|tail -n 4|head -n 2|xargs echo|sed -e 's/\s/../'|xargs -n 1 git log --summary"