รับแฮชเวอร์ชัน Git สั้น ๆ


381

มีวิธีที่สะอาดกว่าในการรับแฮชรุ่นสั้น ๆHEADจาก Git หรือไม่?

ฉันต้องการที่จะเห็นผลลัพธ์เดียวกันกับที่ฉันได้รับจาก:

 git log -n 1 | head -n 1 | sed -e 's/^commit //' | head -c 8

ฉันใช้คำสั่งข้างต้นเพื่อสร้างสตริงรุ่น แต่สิ่งนี้ดียิ่งขึ้น:

git describe --tags

มันจะออกสายเช่น0.1.12(แท็กกระทำกระทำ) หรือ0.1.11-5-g0c85fbc(ห้ากระทำหลังจากแท็ก)


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

@ MatrixFrogขอบคุณสำหรับเคล็ดลับ! ฉันมีนามแฝง git ง่าย ๆ อยู่แล้ว แต่ไม่รู้ว่ามันจะมีประสิทธิภาพเพียงใดจนถึงตอนนี้ ฉันชอบกราฟวิซที่แสดงเป็นพิเศษ
อัตติลาโอ

1
ฮะ. เมื่อฉันเรียกใช้git describe --tagsฉันได้รับข้อความ"ร้ายแรง: ไม่พบชื่อไม่สามารถอธิบายอะไรได้" .
Quinn Comendant

@QuinnComendant คุณอาจต้องติดแท็กก่อนเพื่อ--tagsให้สามารถใช้งานได้ ลองสร้างแท็กเป็นครั้งแรก ; git tag 1.0.0เช่น
อัตติลาโอ.

คำตอบ:


696

ลองสิ่งนี้:

git rev-parse --short HEAD

คำสั่งgit rev-parseสามารถทำสิ่งต่าง ๆ ที่น่าทึ่งได้มากมายดังนั้นคุณจะต้องอ่านเอกสารอย่างละเอียดเพื่อตรวจดูว่า


4
คุณสามารถทำสิ่งย้อนกลับและรับแฮชคอมมิชชันนานจากแฮชคอมมิทสั้นโดยทำสิ่งต่อไปนี้git rev-parse HEAD
Andy

9
คำสั่งยังทำงานกับรหัส rev ที่มีความยาวซึ่งคัดลอกมาจากแหล่งอื่น ๆgit logเช่นgit rev-parse --short 97dd2ae065771908ee9ae0fa08ccdb58b5a6b18fผลตอบแทน97dd2ae
chiborg

3
มันใช้งานได้กับการอ้างอิง คุณสามารถใช้ส่วนหัวชื่อแท็กชื่อสาขาหรือแฮชธรรมดา
d12frosted

1
คำเตือนนี่จะส่งคืนอักขระ 7 ตัวที่จะแฮช (โดยค่าเริ่มต้น) ในขณะที่หลาย ๆ สถานที่เช่น gitlab ใช้ 8 ตัวอักษร!
masterxilo

3
คุณสามารถใช้git rev-parse --short=8 HEADเพื่อรับความยาว 8 อักขระที่ GitLab ใช้ นอกจากนี้คุณยังสามารถตั้งค่าcore.abbrevเป็น 8 สำหรับ repo git เฉพาะด้วยคำสั่งเช่นgit config core.abbrev 8 Source
n8felton


70
git log -1 --abbrev-commit

จะทำยังไง

git log --abbrev-commit

จะแสดงรายการบันทึกที่มีการตรวจสอบ SHA-1 แบบย่อ


1
อย่างที่สองคือสิ่งที่ฉันกำลังมองหา! ง่ายมากที่จะจดจำและมีประโยชน์ในชีวิตประจำวัน
iFreilicht

ใช้งานได้กับgit log --pretty=onelineซึ่งแตกต่าง--onelineหรือพิมพ์แฮชขนาดเต็ม
sdaau

46

วิธีง่ายๆในการดูเวอร์ชันสั้น ๆ ของ Git และข้อความคอมมิท Git คือ:

git log --oneline

โปรดทราบว่านี่เป็นการจดชวเลข

git log --pretty=oneline --abbrev-commit

1
- ออนไลน์เป็นตัวเลือกที่ดีที่สุด
Juan Ignacio Barisich

1
@JuanIgnacioBaris ตัวเลือกที่ดีที่สุดขึ้นอยู่กับจำนวนข้อมูลที่คุณต้องการดู ในกรณีที่ต้องการข้อมูลเพิ่มเติมเช่นผู้แต่งหรือวันที่บันทึก git --abbrev-commit จะเป็นตัวเลือกที่ดีกว่า นอกจากนี้ยังเข้าสู่ระบบ --pretty อาจจะเป็นตัวเลือกที่ดีกว่าที่จะเลือกข้อมูลเข้าสู่ระบบ
ความเร็ว

35

วิธีที่ง่ายจริงๆคือ:

git describe --always

1
ฮ่า, หวาน, ที่อยู่ที่กรณีที่คอมไพล์อธิบายจะล้มเหลวอย่างอื่น (เพราะอธิบายคาดว่าจะอยู่ที่ไหนสักแห่งแท็กในประวัติศาสตร์) ขอบคุณ
กระตือรือร้นที่

8
ไม่ดีถ้าคุณต้องการแฮชสั้นอย่างเข้มงวด - เนื่องจากสามารถส่งคืนแท็กที่มีคำอธิบายประกอบได้
Zitrax

ในบางกรณีgit describe --longอาจช่วยได้ จากเอกสาร : "ส่งออกรูปแบบยาวเสมอ (แท็กจำนวนการกระทำและชื่อการส่งคำย่อ) แม้ว่าจะตรงกับแท็กก็ตาม" [ความสำคัญของฉัน]
djvg

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

16

สาขาที่มีแฮชแบบสั้นและความคิดเห็นล่าสุด:

git branch -v

  develop      717c2f9 [ahead 42] blabla
* master       2722bbe [ahead 1] bla

10

ฉันมี Git เวอร์ชั่น 2.7.4 พร้อมการตั้งค่าต่อไปนี้:

git config --global log.abbrevcommit yes
git config --global core.abbrev 8

ตอนนี้เมื่อฉัน:

git log --pretty=oneline

ฉันได้รับรหัสคอมมิชชันที่แปดหลักอย่างย่อ:

ed054a38 add project based .gitignore
30a3fa4c add ez version
0a6e9015 add logic for shifting days
af4ab954 add n days ago
...

1
ในขณะที่รหัสนี้อาจตอบคำถามให้บริบทเพิ่มเติมเกี่ยวกับวิธีการและวิธีการแก้ปัญหาจะปรับปรุงค่าระยะยาวของคำตอบ
SherylHohman

1
ความคิดที่ดี. ชื่นชมมัน Sheryl
Down the Stream

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