ฉันพยายามหาคำสั่ง Git พิเศษสำหรับสิ่งนี้ แต่หาไม่พบ สั้นกว่าหรือเร็วกว่านี้อีกหรือไม่?
git branch | awk '/\*/ { print $2; }'
ฉันพยายามหาคำสั่ง Git พิเศษสำหรับสิ่งนี้ แต่หาไม่พบ สั้นกว่าหรือเร็วกว่านี้อีกหรือไม่?
git branch | awk '/\*/ { print $2; }'
คำตอบ:
$ git rev-parse --abbrev-ref HEAD
master
สิ่งนี้ควรใช้กับ Git 1.6.3 หรือใหม่กว่า
HEAD
ไม่คาดหวังmaster
ใน Git 1.8.1 คุณสามารถใช้คำสั่งgit symbolic-refกับตัวเลือก "--short":
$ git symbolic-ref HEAD
refs/heads/develop
$ git symbolic-ref --short HEAD
develop
fatal: ref HEAD is not a symbolic ref
เมื่อรันสิ่งนี้เป็นส่วนหนึ่งของ TravisCI build
ด้วย Git 2.22 (Q2 2019) git branch --show-current
คุณจะมีวิธีการที่เรียบง่าย:
ดูกระทำ 0ecb1fc (25 ตุลาคม 2018) โดยแดเนียลส์ Umanovskis (umanovskis
)
(ผสานโดยJunio C Hamano - gitster
- in 3710f60 , 07 Mar 2019)
branch
: แนะนำ--show-current
ตัวเลือกการแสดงผลเมื่อเรียกด้วย
--show-current
,git branch
จะพิมพ์ชื่อสาขาในปัจจุบันและยุติ เฉพาะชื่อจริงได้รับการตีพิมพ์โดยไม่ต้อง
ในสถานะ HEAD ที่แยกออกไม่มีอะไรที่เป็นผลลัพธ์refs/heads
มีไว้สำหรับการเขียนสคริปต์และการใช้งานแบบโต้ตอบ / ให้ข้อมูล
ซึ่งแตกต่างจากgit branch --list
ไม่มีการกรองเป็นสิ่งจำเป็นที่จะเพียงแค่ได้รับชื่อสาขา
คุณอาจจะสนใจในผลลัพธ์ของ
git symbolic-ref HEAD
โดยเฉพาะอย่างยิ่งขึ้นอยู่กับความต้องการและเค้าโครงที่คุณอาจต้องการทำ
basename $(git symbolic-ref HEAD)
หรือ
git symbolic-ref HEAD | cut -d/ -f3-
แล้วอีกครั้งมี.git/HEAD
ไฟล์ที่อาจเป็นที่สนใจของคุณ
git rev-parse --symbolic-full-name
git symbolic-ref
basename
หรือcut
; ใช้BR=${BR#refs/heads/}
(โดยที่ BR เป็นชื่อของตัวแปรที่คุณบันทึกผลลัพธ์ของgit symbolic-ref HEAD
)
git symbolic-ref --short HEAD
ยัง
จากสิ่งที่ฉันสามารถบอกได้ไม่มีวิธีใดที่จะแสดงเฉพาะสาขาปัจจุบันใน Git ดังนั้นฉันจึงใช้:
git branch | grep '*'
grep '*'
เป็นนามข้อผิดพลาดทางไวยากรณ์ คุณอาจต้องการgit branch | sed -n 's/^\* //p'
ต่อไป หรือจริงๆแล้วสิ่งที่ OP โพสต์ไว้ในตอนแรกซึ่งมีจำนวนเท่ากัน
grep '*'
เป็นข้อผิดพลาดทางไวยากรณ์ในนาม?
'*'
คือการแสดงออกปกติและเป็นเช่นนั้นมันไม่ถูกต้อง คุณอาจต้องการใช้'[*]'
(นั่นคืออักขระ*
แทนตัวดำเนินการ "เป็นศูนย์หรือมากกว่านั้น")
grep '\*'
git branch | grep "*" | cut -d' ' -f2
ฉันเดาว่าสิ่งนี้ควรจะรวดเร็วและสามารถใช้กับ Python API ได้:
git branch --contains HEAD
* master
ฉันกำลังใช้
/etc/bash_completion.d/git
มันมาพร้อมกับ Git และให้พรอมต์ด้วยชื่อสาขาและอาร์กิวเมนต์ที่สมบูรณ์
$ source /etc//bash_completion.d/git-prompt
ไฟล์อาจมีชื่อแตกต่างกันไปตามระบบที่ต่างกัน (หมายเหตุ: source
คำหลักเป็นเช่นเดียวกับเพียง.
(dot) ในทุบตี.)
นี่ไม่ใช่สั้น แต่เกี่ยวข้องกับสาขาแยกเช่นกัน:
git branch | awk -v FS=' ' '/\*/{print $NF}' | sed 's|[()]||g'
เพื่อความสมบูรณ์echo $(__git_ps1)
บน Linux อย่างน้อยควรให้ชื่อของสาขาปัจจุบันที่ล้อมรอบด้วยวงเล็บ
นี้อาจจะเป็นประโยชน์บางสถานการณ์ที่มันไม่ได้เป็นคำสั่ง Git (ในขณะที่ขึ้นอยู่กับ Git) สะดุดตาสำหรับการตั้งค่าคำสั่งทุบตีคุณพร้อมที่จะแสดงสาขาในปัจจุบัน
ตัวอย่างเช่น:
/mnt/c/git/ConsoleApp1 (test-branch)> echo $(__git_ps1)
(test-branch)
/mnt/c/git/ConsoleApp1 (test-branch)> git checkout master
Switched to branch 'master'
/mnt/c/git/ConsoleApp1 (master)> echo $(__git_ps1)
(master)
/mnt/c/git/ConsoleApp1 (master)> cd ..
/mnt/c/git> echo $(__git_ps1)
/mnt/c/git>
บางคนอาจพบว่า ( ) เป็นประโยชน์ สาขาปัจจุบันจะแสดงด้วยเครื่องหมาย *git show-branch
--current
host-78-65-229-191:idp-mobileid user-1$ git show-branch --current
! [CICD-1283-pipeline-in-shared-libraries] feat(CICD-1283): Use latest version of custom release plugin.
* [master] Merge pull request #12 in CORES/idp-mobileid from feature/fix-schema-name to master
--
+ [CICD-1283-pipeline-in-shared-libraries] feat(CICD-1283): Use latest version of custom release plugin.
+ [CICD-1283-pipeline-in-shared-libraries^] feat(CICD-1283): Used the renamed AWS pipeline.
+ [CICD-1283-pipeline-in-shared-libraries~2] feat(CICD-1283): Point to feature branches of shared libraries.
-- [master] Merge pull request #12 in CORES/idp-mobileid from feature/fix-schema-name to master