ฉันมีปัญหาในการค้นหาว่าแท็กใดถูกเช็คเอาต์
เมื่อฉันทำ:
git checkout tag1
git branch
ฉันไม่สามารถหาแท็กที่ฉันใช้อยู่ได้ มันบันทึกเท่านั้น:
* (no branch)
master
เป็นไปได้ไหมที่จะตรวจสอบว่าแท็กใดบ้างที่เช็คเอาท์? tag1ในตัวอย่างข้างต้นนี้จะเป็น
ฉันมีปัญหาในการค้นหาว่าแท็กใดถูกเช็คเอาต์
เมื่อฉันทำ:
git checkout tag1
git branch
ฉันไม่สามารถหาแท็กที่ฉันใช้อยู่ได้ มันบันทึกเท่านั้น:
* (no branch)
master
เป็นไปได้ไหมที่จะตรวจสอบว่าแท็กใดบ้างที่เช็คเอาท์? tag1ในตัวอย่างข้างต้นนี้จะเป็น
คำตอบ:
แก้ไข : Jakub Narębskiมี git-fu มากขึ้น คำสั่งที่ง่ายกว่านี้ดังต่อไปนี้ทำงานได้อย่างสมบูรณ์:
git describe --tags
(หรือไม่มี--tagsหากคุณตรวจสอบแท็กที่มีคำอธิบายประกอบแท็กของฉันมีน้ำหนักเบาดังนั้นฉันจึงต้องใช้ - แท็ก)
คำตอบเดิมดังต่อไปนี้:
git describe --exact-match --tags $(git log -n1 --pretty='%h')
คนที่มี git-fu มากกว่าอาจมีวิธีแก้ปัญหาที่สง่างามกว่า ...
นี่เป็นการยกระดับความจริงที่git-logรายงานบันทึกเริ่มต้นจากสิ่งที่คุณเช็คเอาท์ %hพิมพ์แฮชตัวย่อ จากนั้นgit describe --exact-match --tagsค้นหาแท็ก (มีน้ำหนักเบาหรือใส่หมายเหตุ) ที่ตรงกับการส่ง
$()ไวยากรณ์ข้างต้นถือว่าคุณกำลังใช้ทุบตีหรือคล้ายกัน
--exact-matchในคำตอบของฉันก่อนที่ความคิดเห็นของคุณ ดีใจที่ได้ทราบว่าคุณสามารถลบออกและยังได้รับข้อมูลที่ดีจากการป้อนข้อมูลแบบฟัซซี่
git rev-parse HEADเป็นวิธีแก้ปัญหาที่ดีกว่าgit log -n1 --pretty='%h'... แต่ทำไมคุณไม่สามารถเขียนHEAD(หรือไม่มีอะไรเลยเป็นgit describeค่าเริ่มต้นของ HEAD)?
สิ่งนี้ใช้ได้สำหรับฉัน git describe --tags --abbrev=0
แสดงแท็กทั้งหมดใน HEAD ปัจจุบัน (หรือกระทำ)
git tag --points-at HEAD
git describeเป็นคำสั่งเครื่องเคลือบซึ่งคุณควรหลีกเลี่ยง:
http://git-blame.blogspot.com/2013/06/checking-current-branch-programatically.html
ฉันใช้:
git name-rev --tags --name-only $(git rev-parse HEAD)
^0สำหรับการกระทำที่สอดคล้องกับแท็ก (เช่นสำหรับการแท็ก1.0มันออก1.0^0) มีวิธีใดที่จะมีเอาต์พุต Git เท่านั้น1.0หรือฉันควรใช้สิ่งนี้
เมื่อคุณตรวจสอบแท็กคุณมีสิ่งที่เรียกว่า"เฮดเดอเฮด" "หัวแฝด"โดยปกติ HEAD ของ Git จะเป็นตัวชี้ไปยังสาขาที่คุณได้เช็คเอาท์ อย่างไรก็ตามหากคุณตรวจสอบสิ่งอื่นนอกเหนือจากสาขาในพื้นที่ (เช่นแท็กหรือสาขาระยะไกลเป็นต้น) คุณมี "หัวเฮดเดอร์" - คุณไม่ได้อยู่ในสาขาใด ๆ คุณไม่ควรกระทำการใด ๆ ในขณะที่อยู่ในหัวที่แยกออก
คุณสามารถตรวจสอบแท็กได้หากคุณไม่ต้องการทำการแก้ไขใด ๆ หากคุณเพียงแค่ตรวจสอบเนื้อหาของไฟล์หรือคุณต้องการสร้างโครงการของคุณจากแท็กก็ไม่เป็นไรgit checkout my_tagและทำงานกับไฟล์ได้ตราบใดที่คุณไม่ให้กระทำการใด ๆ หากคุณต้องการเริ่มแก้ไขไฟล์คุณควรสร้างสาขาตามแท็ก:
$ git checkout -b my_tag_branch my_tag
จะสร้างสาขาใหม่ที่เรียกว่าเริ่มต้นจากmy_tag_branch my_tagการเปลี่ยนแปลงในสาขานี้ปลอดภัย
git log --decorate
สิ่งนี้จะบอกคุณว่าผู้อ้างอิงที่ชี้ไปที่การกระทำที่ชำระเงินในขณะนี้
git describeจะแสดงชื่อแท็กถ้าคุณตรงกับ (ข้อเขียน) แท็กหรือ<tag>-<n>-g<shortened sha-1>หากไม่ได้ซึ่งเป็นจำนวนการกระทำตั้งแต่<n><tag>