ผลผลิตของสาขา git ในต้นไม้เหมือนแฟชั่น


160

ตอนนี้เมื่อฉันพิมพ์ "git branch"

มันแสดงรายการสาขาของฉันตามลำดับโดยพลการ

สิ่งที่ฉันต้องการคือถ้า "สาขา git" แสดงรายการของฉันในต้นไม้เช่นแฟชั่น, somethign ชอบ:

master
|-- foo
  |-- foo1
  |-- foo2
|-- bar
  |-- bar4

ที่นี่ foo & bar แยกจากต้นแบบ foo1 & foo2 แยกจาก foo; bar4 แยกจากบาร์

มันง่ายที่จะสำเร็จหรือไม่?

[โปรแกรมอรรถประโยชน์บรรทัดคำสั่งเท่านั้น สิ่งนี้ต้องพอดีกับเวิร์กโฟลว์ zsh / vim ของฉัน]


ไม่มีคำตอบที่นี่ (รวมของฉันเอง) ดูเหมือนจะให้ทางออกที่เพียงพอสำหรับสิ่งที่ฉันคิดว่าคุณต้องการและสิ่งที่ฉันรู้ว่าฉันต้องการ ฉันจะเขียนโปรแกรมอรรถประโยชน์ใหม่เพื่อแก้ปัญหานี้เมื่อฉันมีโอกาส git_treeอาจจะเรียกมันว่า มันจะมีอะไรบางอย่างที่ส่งออกเช่นarc flowไม่ที่นี่: stackoverflow.com/questions/54227968/... บางทีสักวันหนึ่งฉันก็สามารถรวมมันเข้าไปในคอมไพล์เองได้
Gabriel Staples

คนนี้ดูเหมือนจะต้องการสิ่งเดียวกันเช่นกัน: reddit.com/r/git/comments/282c1f/…
Gabriel Staples

git log --graphฉันคิดว่าเพียงพอแล้ว
DawnSong

คำตอบ:


203

คำตอบด้านล่างใช้git log:

ฉันกล่าวถึงวิธีการที่คล้ายกันในปี 2009 ด้วย " ไม่สามารถแสดงต้นไม้ Git ใน terminal ":

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

แต่ชื่อเต็มที่ฉันใช้อยู่ใน " วิธีแสดงชื่อแท็กและชื่อสาขาโดยใช้ git log --graph " (2011):

git config --global alias.lgb "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset%n' --abbrev-commit --date=relative --branches"

git lgb

คำตอบเดิม (2010)

git show-branch --list เข้าใกล้สิ่งที่คุณต้องการ (พร้อมลำดับ topo)

--topo-order

โดยค่าเริ่มต้นสาขาและการกระทำของพวกเขาจะแสดงตามลำดับเวลาย้อนกลับ
ตัวเลือกนี้ทำให้พวกเขาปรากฏในลำดับทอพอโลยี (กล่าวคือการกระทำการสืบทอดจะปรากฏต่อหน้าพ่อแม่)

แต่เครื่องมือgit wtfก็สามารถช่วยได้เช่นกัน ตัวอย่าง:

$ git wtf
Local branch: master
[ ] NOT in sync with remote (needs push)
    - Add before-search hook, for shortcuts for custom search queries. [4430d1b] (edwardzyang@...; 7 days ago)
Remote branch: origin/master (git@gitorious.org:sup/mainline.git)
[x] in sync with local

Feature branches:
{ } origin/release-0.8.1 is NOT merged in (1 commit ahead)
    - bump to 0.8.1 [dab43fb] (wmorgan-sup@...; 2 days ago)
[ ] labels-before-subj is NOT merged in (1 commit ahead)
    - put labels before subject in thread index view [790b64d] (marka@...; 4 weeks ago)
{x} origin/enclosed-message-display-tweaks merged in
(x) experiment merged in (only locally)

NOTE: working directory contains modified files

git-wtf แสดงให้คุณเห็น:

  • สาขาของคุณเกี่ยวข้องกับ repo ระยะไกลอย่างไรหากเป็นสาขาการติดตาม
  • สาขาของคุณเกี่ยวข้องกับสาขาที่ไม่มีคุณสมบัติ ("เวอร์ชัน") อย่างไรถ้าเป็นสาขา
  • สาขาของคุณเกี่ยวข้องกับสาขาฟีเจอร์อย่างไรถ้าเป็นสาขาเวอร์ชัน

เคยใช้รูปแบบที่สวยงามของคุณที่แสดงอีเมลผู้แต่งด้วยการใช้% ae ฉันชอบเรียกนามแฝงด้วย "sl" เพื่อคล้ายกับ smartlog ของ hg
fiorix

ขอบคุณมากสำหรับลิงก์ไปยังgit-wtfเครื่องมือมันมีประโยชน์อย่างมาก ดูเหมือนว่าจะสรุปข้อสรุปที่ฉันจะดึงจากการจ้องมองที่git logต้นไม้แฟนซีแต่ในบทสรุปที่ดี
ลุคเดวิส

ฉันหวังว่าจะหาวิธีเพื่อให้สาขาเช็คเอาต์ควรแสดงจากสาขาที่เช็คเอาท์จาก
Chang Zhao

@ChangZhao นั่นคล้ายกับ "การค้นหาสาขาหลัก" และนั่นไม่ใช่เรื่องง่ายที่จะทำ: stackoverflow.com/a/3162929/6309 , stackoverflow.com/a/56452713/6309
VonC

147

มันไม่ได้เป็นสิ่งที่คุณขอ แต่

git log --graph --simplify-by-decoration --pretty=format:'%d' --all

ทำผลงานได้ค่อนข้างดี มันแสดงแท็กและสาขาระยะไกลเช่นกัน สิ่งนี้อาจไม่เป็นที่ถูกใจสำหรับทุกคน แต่ฉันคิดว่ามันมีประโยชน์ --simplifiy-by-decorationเป็นเคล็ดลับใหญ่สำหรับการ จำกัด การอ้างอิงที่แสดง

ฉันใช้คำสั่งที่คล้ายกันเพื่อดูบันทึกของฉัน ฉันสามารถแทนที่gitkการใช้งานของฉันด้วย:

git log --graph --oneline --decorate --all

ฉันใช้โดยรวมนามแฝงเหล่านี้ในไฟล์ ~ / .gitconfig ของฉัน:

[alias]
    l = log --graph --oneline --decorate
    ll = log --graph --oneline --decorate --branches --tags
    lll = log --graph --oneline --decorate --all

แก้ไข:อัปเดตคำสั่งบันทึก / นามแฝงที่แนะนำเพื่อใช้ธงตัวเลือกที่ง่ายขึ้น


1
IMO นี่เป็นคำตอบที่ดีที่สุดที่นี่ แต่ฉันคิดว่าSourceTreeหรือ gitk หรือสิ่งที่คล้ายกันคือวิธีในการทำสิ่งนี้
JaKXz

สิ่งนี้แสดงกิ่งที่จุดกำเนิด มีวิธีใดบ้างที่จะแสดงสิ่งนี้สำหรับสาขาท้องถิ่น
Jeff

@ Jeff แทนที่--allด้วย--branches --tagsอาจจะทำมัน
nocash

คำตอบที่สมบูรณ์แบบ สิ่งที่ฉันกำลังมองหาฉันพบที่นี่ ยิ่งใหญ่
AMIC MING

12

ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการกระทำของผู้ปกครองเช่นกัน:

git log --graph --all \
--format='%C(cyan dim) %p %Cred %h %C(white dim) %s %Cgreen(%cr)%C(cyan dim) <%an>%C(bold yellow)%d%Creset'

10

gitkคุณสามารถใช้เครื่องมือที่เรียกว่า


ฉันชอบ gitk แต่ฉันไม่ได้คิดgitkใน Mac หากคุณมีข้อเสนอแนะโปรดแจ้งให้เราทราบ ฉันเริ่มใช้Github Desktopแต่ชอบที่จะทำงานบนบรรทัดคำสั่ง
AMIC MING

6

ทดสอบบน Ubuntu:

sudo apt install git-extras
git-show-tree

สิ่งนี้ให้ผลคล้ายกับ 2 คำตอบที่ถูกโหวตมากที่สุดที่นี่

ที่มา: http://manpages.ubuntu.com/manpages/bionic/man1/git-show-tree.1.html


นอกจากนี้หากคุณติดตั้งarcanist (แก้ไข: ติดตั้งarcanist arcanist ของส้อม - ดูที่ด้านล่างของคำตอบนี้ที่นี่เพื่อดูคำแนะนำในการติดตั้ง) arc flowแสดงต้นไม้ที่ขึ้นต่อกันที่สวยงามของการขึ้นต้นน้ำ (เช่น: ซึ่งถูกตั้งค่าไว้ก่อนหน้านี้ผ่านarc flow new_branchหรือด้วยตนเองgit branch --set-upstream-to=upstream_branch)

เทคนิคคอมไพล์โบนัส:

ที่เกี่ยวข้อง:

  1. อะไรคือความแตกต่างระหว่าง“ กราฟต์อาร์ค” และ“ อาร์คแพทช์”

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