ค้นหาการกระทำที่ได้รับการชำระเงินใน Git


157

ฉันอยู่ตรงกลางgit bisectเซสชัน

อะไรคือคำสั่งที่จะค้นหาว่าคอมมิชชันใด (แฮช SHA1) ที่ฉันกำลังใช้อยู่ git statusไม่ได้ให้สิ่งนี้

แก้ไข: ฉันเดาว่าการโทรgit logและการดูรายการแรกใช้ได้หรือไม่

คำตอบ:


173

คุณมีวิธีที่แตกต่างกันอย่างน้อย 5 วิธีในการดูการกระทำที่คุณได้ทำไว้ในสำเนาการทำงานของคุณในระหว่างgit bisectเซสชัน ( โปรดทราบว่าตัวเลือกที่ 1-4 จะใช้งานได้เมื่อคุณไม่ได้ทำการแบ่งส่วน ):

  1. git show.
  2. git log -1.
  3. ทุบตีให้
  4. git status.
  5. git bisect visualize.

ฉันจะอธิบายแต่ละตัวเลือกโดยละเอียดด้านล่าง

ตัวเลือกที่ 1: การแสดง git

ตามที่อธิบายไว้ในคำตอบสำหรับคำถามทั่วไปเกี่ยวกับวิธีพิจารณาว่าคุณยอมรับการชำระเงินใด (ไม่ใช่เฉพาะในขณะนี้git bisect) คุณสามารถใช้git showกับ-sตัวเลือกในการระงับเอาต์พุตแพ็ตช์:

$ git show --oneline -s
a9874fd Merge branch 'epic-feature'

ตัวเลือก 2: git log -1

นอกจากนี้คุณยังสามารถทำได้git log -1เพื่อค้นหาว่าคุณกำลังทำอะไรอยู่

$ git log -1 --oneline
c1abcde Add feature-003

ตัวเลือก 3: Bash prompt

ใน Git เวอร์ชั่น 1.8.3+ (หรือเป็นรุ่นก่อนหน้านี้หรือไม่) หากคุณมี Bash prompt ของคุณกำหนดค่าให้แสดงสาขาปัจจุบันที่คุณเช็คเอาท์ในสำเนาการทำงานของคุณแล้วมันจะแสดงการกระทำปัจจุบันที่คุณได้ตรวจสอบแล้ว ออกมาในช่วงเซสชั่น bisect หรือเมื่อคุณอยู่ในสถานะ "ถอดหัว" ในตัวอย่างด้านล่างขณะนี้ฉันได้c1abcdeเช็คเอาต์:

# Prompt during a bisect
user ~ (c1abcde...)|BISECTING $

# Prompt at detached HEAD state 
user ~ (c1abcde...) $

ตัวเลือก 4: สถานะ git

เช่นเดียวกับ Git รุ่น 1.8.3+ (และอาจเป็นไปได้ก่อนหน้านี้ไม่แน่ใจอีกครั้ง) การเรียกใช้git statusจะแสดงให้คุณเห็นว่าคุณได้ทำอะไรในระหว่างการตัดและเมื่อคุณอยู่ในสถานะ HEAD ที่แยกออกมา:

$ git status
# HEAD detached at c1abcde <== RIGHT HERE

ตัวเลือกที่ 5: gis bisect ให้เห็นภาพ

สุดท้ายในขณะที่คุณกำลังทำgit bisectคุณยังสามารถใช้git bisect visualizeหรือนามแฝงgit bisect viewในตัวเพื่อเปิดใช้gitkงานเพื่อให้คุณสามารถดูได้ว่าคุณกำลังทำอะไรอยู่ ฉันค่อนข้างแน่ใจว่าสิ่งนี้มีอยู่ก่อนรุ่น 1.8.3 ฉันไม่แน่ใจว่าจะเปิดตัวเวอร์ชันใด:

git bisect visualize 
git bisect view # shorter, means same thing

ป้อนคำอธิบายรูปภาพที่นี่


เรียบร้อย เมื่อฉันถามคำถามที่ฉันไม่ได้อยู่ใน Git 1.8 และตั้งแต่นั้นฉันก็ได้รับ zsh ที่ถูกต้องซึ่งแสดงแฮชการกระทำฉันคิดว่ามันอาจแสดงตัวบ่งชี้พิเศษสำหรับฉันโดยเฉพาะถ้าฉันถูกตัดขาด แต่ฉันยังไม่ได้ เสื้อจริงทำใด ๆ เพิ่มเติมตัดตั้งแต่เวลาที่ผมถามคำถามนี้ส่วนใหญ่git log -p -S <search>จะทำงาน
Steven Lu

git statusไม่แสดงรหัสกระทำการยกเว้นว่าคุณอยู่ในสถานะแยกออก ไม่อย่างนั้นจะพูดว่า "บนสาขาอะไรก็ตาม " git showทำงานได้แม้ว่า
กีบ

87

คุณสามารถทำได้:

git rev-parse HEAD

เพื่ออธิบายเพิ่มเติมเล็กน้อย: git rev-parseเป็นคำสั่งพื้นฐานของ git สำหรับการตีความวิธีแปลกใหม่ใด ๆ ที่คุณสามารถระบุชื่อของการกระทำและHEADเป็นการอ้างอิงถึงการกระทำหรือสาขาปัจจุบันของคุณ (ในgit bisectเซสชั่นมันจะชี้ไปที่การคอมมิท ("HEAD เดี่ยว") แทนที่จะเป็นสาขา)

อีกวิธีหนึ่ง (และง่ายต่อการจดจำ) จะทำ:

git show

... ซึ่งจะแสดงค่าเริ่มต้นที่HEADชี้ไป สำหรับรุ่นที่กระชับยิ่งขึ้นคุณสามารถทำสิ่งต่อไปนี้

$ git show --oneline -s
c0235b7 Autorotate uploaded images based on EXIF orientation

3
หากคุณต้องการเพียงแค่ใช้แฮชสำหรับการใช้งานที่อื่นgit rev-parse HEADไม่จำเป็นต้องทำการประมวลผลเทียบกับทางเลือกขยะทั้งหมด
Nick T

17
$ git rev-parse HEAD
273cf91b4057366a560b9ddcee8fe58d4c21e6cb

ปรับปรุง:

อีกทางหนึ่ง (ถ้าคุณมีแท็ก):

(ดีสำหรับการตั้งชื่อรุ่นไม่ดีสำหรับการส่งกลับไปยังคอมไพล์)

$ git อธิบาย
v0.1.49-localhost-AG-1-g273cf91

หรือ (ตามที่แนะนำให้ทำรายการที่นี่เพื่อความสมบูรณ์):

$ git show - ออนไลน์ -s
c0235b7 Autorotate ภาพที่อัปโหลดตามการวางแนว EXIF

7
คุณขอ SHA1 ไม่ใช่สิ่งที่จำได้ง่าย ;-)
Alexander Gladysh

เวอร์ชันนี้มีประโยชน์มากหากคุณต้องการตรวจสอบในสคริปต์
Daniele Licitra

12

หากคุณต้องการแยกข้อมูลง่ายๆคุณสามารถใช้สิ่งนั้นgit showกับ--format=<string>ตัวเลือก ... และขอให้ไม่ให้ความแตกต่างกับ--no-patchคุณ ซึ่งหมายความว่าคุณสามารถรับเอาท์พุทสไตล์ printf ของสิ่งที่คุณต้องการซึ่งมักจะเป็นฟิลด์เดียว

ตัวอย่างเช่นในการรับแฮชที่สั้นลง%hคุณสามารถพูดว่า:

$ git show --format="%h" --no-patch
4b703eb

หากคุณต้องการบันทึกสิ่งนั้นลงในตัวแปรสภาพแวดล้อมใน bash (เป็นไปได้ที่คนต้องการทำ) คุณสามารถใช้$()ไวยากรณ์ :

$ GIT_COMMIT="$(git show --format="%h" --no-patch)"

$ echo $GIT_COMMIT
4b703eb

เต็มรูปแบบรายการของสิ่งที่คุณสามารถทำได้คือใน git show --helpแต่นี่คือรายการย่อของคุณสมบัติที่อาจมีประโยชน์:

  • %H กระทำการแฮช
  • %h ตัวย่อกระทำการแฮช
  • %T แฮชต้นไม้
  • %t แฮชต้นไม้ย่อ
  • %P ผู้ปกครองแฮช
  • %p แฮชพาเรนย่อ
  • %an ชื่อผู้แต่ง
  • %ae อีเมลผู้แต่ง
  • %at วันที่ผู้เขียน, การประทับเวลา UNIX
  • %aI วันที่ผู้เขียนรูปแบบ ISO 8601 ที่เข้มงวด
  • %cn ชื่อผู้เดินทาง
  • %ce อีเมลผู้ส่ง
  • %ct วันที่ส่งข้อมูล, เวลาประทับ UNIX
  • %cI วันที่ส่งมอบรูปแบบ ISO 8601 ที่เข้มงวด
  • %s เรื่อง
  • %f หัวเรื่องที่ถูกสุขอนามัยเหมาะสำหรับชื่อไฟล์
  • %gD ตัวเลือก reflog เช่น refs / stash @ {1}
  • %gd ตัวเลือก reflog ที่สั้นลงเช่น stash @ {1}

ทั้งหมดที่ตัวเลือกการจัดรูปแบบ แต่showมีอะไรสำหรับสาขา
bvj

2

ใช้git showซึ่งแสดงข้อความการส่งและการเริ่มต้นของการส่งข้อความเมื่อไม่มีการโต้แย้ง

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