แสดงผลโทโพโลยีสาขาใน Git


883

ฉันกำลังเล่นกับ Git โดยแยกเครื่องของตัวเองและฉันพบว่ามันยากที่จะรักษารูปแบบจิตของทุกสาขาและกระทำของฉัน ฉันรู้ว่าฉันสามารถทำgit logเพื่อดูประวัติการกระทำจากที่ฉันอยู่ แต่มีวิธีการดูภูมิประเทศสาขาทั้งหมดบางอย่างเช่นแผนที่ ASCII เหล่านี้ที่ดูเหมือนจะใช้ทุกที่เพื่ออธิบายสาขาหรือไม่

      .-A---M---N---O---P
     /     /   /   /   /
    I     B   C   D   E
     \   /   /   /   /
      `-------------'

แค่รู้สึกว่ามีใครบางคนเข้ามาและพยายามหาที่เก็บของฉันจะมีปัญหาในการทำงานอย่างชัดเจนว่าเกิดอะไรขึ้น

ฉันเดาว่าฉันได้รับอิทธิพลจากเบราว์เซอร์กระแสของ AccuRev ...



1
@ leif81, ครึ่งที่ซ้ำกันสำหรับฉัน @ Masi แยก gitk อย่างชัดเจนในคำถามของเขา
Benjol

คำตอบ:


1081

ใช้หรือgit log --graph gitk(ทั้งสองยอมรับ--allเช่นกันซึ่งจะแสดงสาขาทั้งหมดแทนเพียงสาขาปัจจุบัน)

สำหรับชื่อสาขาและมุมมองย่อลอง:

git log --graph --decorate --oneline

46
สิ่งนี้ไม่ได้ติดฉลากการผูกมัดกับสาขา ฉันจะไม่เรียกสิ่งนี้ว่าการสร้างภาพข้อมูลที่ดีตามที่เป็นอยู่
Roman Starkov

7
ขอบคุณ! gitg ยังมี--allตัวเลือกและป้ายกำกับการกระทำ ฉันไม่เคยเห็นแบบเลื่อนลงที่คุณสามารถเลือกสาขาทั้งหมดได้
โทมัส

210
ฉันขอแนะนำgit log --graph --decorate --oneline- แสดงหนึ่งการกระทำต่อบรรทัดและตกแต่งด้วยชื่อสาขา
sleske

8
tig (ไคลเอนต์ gc ncurse) ยังมี--allตัวเลือก ค่อนข้างมีประโยชน์!
Pierre-Adrien Buisson

5
ดูคำตอบเพิ่มเติมจาก Andrewเกี่ยวกับ--simplify-by-decorationตัวเลือก
ruvim

482

ฉันมักจะใช้

git log --graph --full-history --all --pretty=format:"%h%x09%d%x20%s"

ด้วยสี (ถ้าเปลือกของคุณเป็นทุบตี):

git log --graph --full-history --all --color \
        --pretty=format:"%x1b[31m%h%x09%x1b[32m%d%x1b[0m%x20%s"

สิ่งนี้จะพิมพ์การแทนค่าแบบข้อความเช่นนี้

* 040cc7c       (HEAD, master) Manual is NOT built by default
* a29ceb7       Removed offensive binary file that was compiled on my machine and was hence incompatible with other machines.
| * 901c7dd     (cvc3) cvc3 now configured before building
| * d9e8b5e     More sane Yices SMT solver caller
| | * 5b98a10   (nullvars) All uninitialized variables get zero inits
| |/
| * 1cad874     CFLAGS for cvc3 to work successfully
| *   1579581   Merge branch 'llvm-inv' into cvc3
| |\
| | * a9a246b   nostaticalias option
| | * 73b91cc   Comment about aliases.
| | * 001b20a   Prints number of iteration and node.
| |/
|/|
| * 39d2638     Included header files to cvc3 sources
| * 266023b     Added cvc3 to blast infrastructure.
| * ac9eb10     Initial sources of cvc3-1.5
|/
* d642f88       Option -aliasstat, by default stats are suppressed

(คุณสามารถใช้git log --format=onelineแต่จะผูกข้อความส่งถึงตัวเลขซึ่งดูไม่น่ารักเท่า IMHO)

ในการสร้างทางลัดสำหรับคำสั่งนี้คุณอาจต้องการแก้ไข~/.gitconfigไฟล์ของคุณ:

[alias]
  gr = log --graph --full-history --all --color --pretty=tformat:"%x1b[31m%h%x09%x1b[32m%d%x1b[0m%x20%s%x20%x1b[33m(%an)%x1b[0m"

อย่างไรก็ตามในขณะที่ Sodelโน้ตVociferousในความคิดเห็นคำสั่งการจัดรูปแบบยาวดังกล่าวยากที่จะจดจำ โดยทั่วไปจะไม่เป็นปัญหาตามที่คุณอาจใส่ไว้ใน~/.gitconfigไฟล์ อย่างไรก็ตามหากบางครั้งคุณต้องลงชื่อเข้าใช้เครื่องระยะไกลซึ่งคุณไม่สามารถแก้ไขไฟล์กำหนดค่าได้คุณสามารถใช้เวอร์ชันที่เรียบง่าย แต่เร็วกว่าเพื่อพิมพ์เวอร์ชัน:

git log --graph --oneline

10
ถ้าคุณชอบวันที่: บันทึกคอมไพล์ - กราฟ - ประวัติเต็ม - ทั้งหมด - สี - วันที่ = สั้น - คำแปล = รูปแบบ: "% x1b [31m% h% x09% x1b [32m% d% x1b [ 0m% x20% ad% s "
sehugg

7
- เส้นตรงเป็นทางเลือกที่น่าจดจำยิ่งกว่าสำหรับการจัดรูปแบบเวทย์มนตร์ที่น่ารัก
Daniel Ralston

1
@SalestheVociferous แน่นอนฉันไม่ได้เข้าหาปัญหาจากด้านที่คุณพูดถึง ฉันขยายคำตอบของฉัน
P Shved

2
หมายเหตุ: --full-historyมีความเกี่ยวข้องเฉพาะเมื่อใช้--simplify-by-decorationหรือระบุไฟล์พา ธ
Slipp D. Thompson

2
ฉันอาจถามว่าคุณได้รับสตริงรูปแบบจากที่ใด หรือว่าบนโลกคุณปรุงสิ่งนั้นได้อย่างไร
elliotwesoff

444

ฉันมี 3 นามแฝง(และนามแฝง 4 ชื่อแทนสำหรับการใช้งานอย่างรวดเร็ว)ที่ปกติฉันจะโยนใน~/.gitconfigไฟล์ของฉัน:

[alias]
    lg = lg1
    lg1 = lg1-specific --all
    lg2 = lg2-specific --all
    lg3 = lg3-specific --all

    lg1-specific = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(auto)%d%C(reset)'
    lg2-specific = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(auto)%d%C(reset)%n''          %C(white)%s%C(reset) %C(dim white)- %an%C(reset)'
    lg3-specific = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset) %C(bold cyan)(committed: %cD)%C(reset) %C(auto)%d%C(reset)%n''          %C(white)%s%C(reset)%n''          %C(dim white)- %an <%ae> %C(reset) %C(dim white)(committer: %cn <%ce>)%C(reset)'

git lg/ git lg1ดูเหมือนว่านี้:

คอมไพล์ lg1

git lg2 มีลักษณะเช่นนี้:

คอมไพล์ lg2

และgit lg3มีลักษณะเช่นนี้:

คอมไพล์ lg3

ควรสังเกตว่าสิ่งนี้ไม่ได้หมายถึงว่าเป็นโซลูชันแบบ end-all-be-all - เป็นเทมเพลตสำหรับคุณที่จะเปลี่ยนเพิ่มและแก้ไขตามความชอบของคุณ หากคุณต้องการใช้สิ่งเหล่านี้คำแนะนำของฉันคือ:

  1. เพิ่มให้พวกเขาของคุณ.gitconfig,
  2. ปรับแต่งตามความต้องการของคุณ (ตัวเลือกสีที่แตกต่างกันการจัดเรียงบรรทัดที่แตกต่างกันสำหรับรุ่น 2 และ 3 บรรทัด ฯลฯ )
  3. แล้วบันทึกสำเนาไปสรุปสาระสำคัญหรือเครื่องมือโค้ดอื่น ๆ เพื่อให้คุณสามารถคัดลอกและวางลง.gitconfigในอนาคต(หรืออีกวิธีหนึ่งคือการควบคุมเวอร์ชัน dotfiles ของคุณแน่นอน)

หมายเหตุ: คำตอบที่คัดลอกมาจากและปรับปรุงตามคำตอบที่stackoverflow.com/questions/1057564/pretty-git-branch-graphsเนื่องจากมีความเหมาะสมมากกว่าที่นี่ ปล่อยสำเนาไว้ที่คำถามอื่นด้วยเหตุผลทางประวัติศาสตร์ตอนนี้ปิดแล้วและคำตอบอ้างอิงโดยกลุ่มคำตอบอื่น ๆ


10
คำแนะนำ: แทนที่%C(bold yellow)ด้วย%C(auto)การมีสีที่แตกต่างกันสำหรับHEAD, ท้องถิ่นและสาขาระยะไกล ( โทษ )
Atcold

2
โปรดทราบว่าคุณสามารถหลีกเลี่ยงตนเองเพิ่มรอยหยักในสตริงรูปแบบของคุณโดยใช้%w(); วิธีนี้คุณยังสามารถตัดบรรทัดให้ยาวขึ้นหรือส่งข้อความหลายบรรทัดโดยไม่ทำให้กราฟยุ่งเหยิง
charliegreen

1
@ mbadawi23 พวกเขาซ้ำซ้อนเพื่อประโยชน์ของความสอดคล้องข้ามแพลตฟอร์มและการติดตั้ง Git --abbrev-commitอยู่ในนั้นเพราะบรรทัดที่ 2 - 3 มีการเยื้องด้วยมือและมีช่องว่างและฉันต้องการตรวจสอบให้แน่ใจว่ามันจะใช้ SHA สั้น - ปลอดภัยยิ่งกว่าเสียใจ --decorateยังมีอยู่ในนั้นเพราะถึงแม้ว่าค่าเริ่มต้นของ Git จะทำสิ่งเดียวกัน แต่ก็สามารถปรับแต่งได้แตกต่างกันหรือแตกต่างกันในรุ่น Git ที่แตกต่างกัน - สำหรับสิ่งเหล่านี้ฉันต้องการตกแต่งอย่างแน่นอน ในที่สุดธงเสริม / ซ้ำซ้อนก็ไม่เลวตรงนี้ - มันจะอยู่ในไฟล์ ไม่ใช่สิ่งที่คุณพิมพ์ตลอดเวลา
Slipp D. Thompson

1
@TimothyPulliam ในตอนท้ายของแต่ละบรรทัดที่แสดงถึงปลายของแต่ละสาขา / แท็กคุณจะเห็นชื่อสาขา / แท็กที่เกี่ยวข้องในวงเล็บ - เช่นในlg1& lg2ภาพหน้าจอคุณสามารถเห็นการ(origin/test_on_10.8)แสดงสาขาระยะไกลและในlg2ภาพหน้าจอที่คุณสามารถ ดู(HEAD -> master, origin/master, origin/HEAD)การแสดงตำแหน่งทั้งภายในและระยะไกลของสาขาและmaster HEADแมตช์นี้สิ่งที่ได้รับความนิยมสาขาการแสดงเครื่องมือ GUI สำหรับ Git ทำ (gitk, SourceTree, TortoiseGit, ตึก, ส้อม, GitX) แม้ว่าจะมีบิตฟุ่มเฟื่อยมากขึ้น(บางเครื่องมือ GUI ใช้รหัสสี)
Slipp D. Thompson

2
@TimothyPulliam เพื่อให้เข้าใจถึงความมุ่งมั่นของ“ ส่วนหนึ่งของแต่ละสาขา” คุณจะต้องมองเห็นเส้นสี เกือบทุกเครื่องมือไม่ได้ช่วยคุณในเรื่องนี้มากนักเพราะ Git ไม่ได้มีส่วนเกี่ยวข้องกับสาขา แต่อย่างใดพวกเขาบอกเป็นนัย ๆ ว่าในช่วงเวลาที่มีการสร้างภาพกราฟนั้นจะอยู่ในสาขาหรือแท็กใด ๆ . หากไม่มีสาขา / แท็กที่อ้างถึงการส่งและจะหายไป (แต่ไม่ใช่การเก็บขยะเป็นเวลาประมาณ 2 สัปดาห์) เพิ่มสาขา / แท็กที่อ้างอิงการคอมมิทที่ไม่ได้อ้างถึงก่อนหน้านี้และมันจะปรากฏขึ้นอีกครั้ง ฉันหวังว่าทั้งหมดนี้สมเหตุสมผล
Slipp D. Thompson

236

ในสูตรใด ๆ เหล่านี้ (ตามบันทึก git หรือ gitk) คุณสามารถเพิ่ม--simplify-by-decorationเพื่อยุบส่วนเชิงเส้นที่ไม่น่าสนใจของประวัติศาสตร์ สิ่งนี้ทำให้โทโพโลยีมากขึ้นสามารถมองเห็นได้ในครั้งเดียว ตอนนี้ฉันสามารถเข้าใจประวัติศาสตร์ขนาดใหญ่ที่ไม่สามารถเข้าใจได้โดยไม่มีตัวเลือกนี้!

ฉันรู้สึกว่าจำเป็นต้องโพสต์สิ่งนี้เพราะดูเหมือนจะไม่เป็นที่รู้จักเท่าที่ควร มันไม่ปรากฏในคำถามสแต็คโอเวอร์โฟลว์ส่วนใหญ่เกี่ยวกับการสร้างภาพประวัติศาสตร์และมันทำให้ฉันค่อนข้างค้นหาเพื่อค้นหา - แม้หลังจากที่ฉันรู้ว่าฉันต้องการมัน! ในที่สุดผมก็พบว่ามันอยู่ในนี้รายงานข้อผิดพลาด Debian การกล่าวถึงครั้งแรกใน Stack Overflow น่าจะเป็นคำตอบนี้โดย Antoine Pelisse


3
สมบูรณ์แบบ - สิ่งที่ฉันกำลังมองหา! มันควรจะได้รับ upvotes มากขึ้น เกือบทุกคนรู้แล้วเกี่ยวกับ gitk / gitg / git log --graph แต่สิ่งเหล่านี้ไม่ได้มีประโยชน์มากนักหากคุณต้องการเห็นภาพโทโพโลยีของสาขาและไม่สนใจสิ่งเดียว
imolit

4
นี่คือสิ่งที่ฉันต้องการยอดเยี่ยม มันเป็นสิ่งเดียวที่ช่วยฉันได้จากคำตอบทั้งหมด --simplify-by-decorationทำให้ชัดเจนว่าเกิดอะไรขึ้น
Ela782

9
นี่ควรเป็นคำตอบจริงๆ git log --graph --all --simplify-by-decorationทำงานได้เช่นกัน
Irfy

ถ้าเพียงเราสามารถใช้--simplify-by-decorationในขณะที่เพิ่ม n กระทำก่อน / หลังแต่ละกระทำ deocrated (เช่น-Bและ-Aสำหรับgrep)
Junvar

ฉันใช้วิธีนี้บ่อยครั้งฉันใช้นามแฝงว่า 'git tree'
user16973

76

Gitk บางครั้งก็เจ็บปวดสำหรับฉันที่จะอ่าน

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

กระตุ้นให้ผมเขียนGitVersionTree

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


3
@ exhuma ฉันมีการประชาสัมพันธ์กับผู้เขียนเพื่อสนับสนุน Mono (ทดสอบบน Ubuntu 13.10 เทียบกับ Mono 2.10)
Max Ehrlich

1
ฉันพบว่า GitVersionTree ช่วยให้สาขาอยู่ในที่เดียวกันด้วยเวลาทำให้ง่ายขึ้นที่จะเห็นว่าสิ่งต่าง ๆ เปลี่ยนแปลงไปอย่างไร
sfranky

48

99.999% ของเวลาของฉันกำลังดูประวัติโดย git lgและ 0.001% git logโดย

ฉันต้องการแชร์นามแฝงบันทึกสองรายการที่อาจมีประโยชน์ (กำหนดค่าจาก. gitconfig):

[Alias]
     lg = log --graph --pretty=format:'%Cred%h%Creset %ad %s %C(yellow)%d%Creset %C(bold blue)<%an>%Creset' --date=short
     hist = log --graph --full-history --all --pretty=format:'%Cred%h%Creset %ad %s %C(yellow)%d%Creset %C(bold blue)<%an>%Creset' --date=short
  • git lg จะเห็นประวัติสาขาปัจจุบัน
  • git hist จะเห็นประวัติสาขาทั้งหมด

44

ดูที่Gitkraken - GUI ข้ามแพลตฟอร์มที่แสดงโทโพโลยีอย่างชัดเจน

โทโพโลยี

นี่คือวิดีโอสอนด่วนเกี่ยวกับคุณสมบัติขั้นสูงบางอย่าง


6
เธรดนี้มี GitKraken อย่างไร แต่ไม่มี SourceTree ที่เก่ากว่าและฟรี (ฉันรู้ว่าฉันรู้ว่า Atlassian ไม่เคยได้รับสิทธิทุกอย่าง แต่ SourceTree เป็นเครื่องมือที่ดีงามสำหรับการแสดง..)
XML

43

ฉันชอบที่git logจะทำ:

 git log --graph --oneline --branches

(เช่นเดียวกับ - ทั้งหมดสำหรับการดูสาขาระยะไกลเช่นกัน)

ใช้งานได้กับ Git รุ่นล่าสุด: เปิดตัวตั้งแต่1.6.3 (พฤ., 7 พฤษภาคม 2009 )

  • " --pretty=<style>ตัวเลือก" ครอบครัวบันทึกของคำสั่งนี้สามารถสะกดคำว่า " --format=<style>"
    นอกจากนี้ยังเป็นสั้นมือ--format=%formatstring--pretty=tformat:%formatstring

  • " --oneline" เป็นคำพ้องความหมายสำหรับ " --pretty=oneline --abbrev-commit"

PS D:\git\tests\finalRepo> git log --graph --oneline --branches --all
* 4919b68 a second bug10 fix
* 3469e13 a first bug10 fix
* dbcc7aa a first legacy evolution
| * 55aac85 another main evol
| | * 47e6ee1 a second bug10 fix
| | * 8183707 a first bug10 fix
| |/
| * e727105 a second evol for 2.0
| * 473d44e a main evol
|/
* b68c1f5 first evol, for making 1.0

คุณยังสามารถ จำกัด ช่วงเวลาของการแสดงผลบันทึก (จำนวนการกระทำ):

PS D:\git\tests\finalRepo> git log --graph --oneline --branches --all -5
* 4919b68 a second bug10 fix
* 3469e13 a first bug10 fix
* dbcc7aa a first legacy evolution
| * 55aac85 another main evol
| | * 47e6ee1 a second bug10 fix

(แสดงเฉพาะการกระทำ 5 ครั้งล่าสุด)


สิ่งที่ฉันไม่ชอบเกี่ยวกับโซลูชันที่เลือกในปัจจุบันคือ:

 git log --graph

มันแสดงข้อมูลมากเกินไป (เมื่อฉันต้องการดูข้อมูลสรุปแบบย่อเท่านั้น):

PS D:\git\tests\finalRepo> git log --graph
* commit 4919b681db93df82ead7ba6190eca6a49a9d82e7
| Author: VonC <vonc@laposte.net>
| Date:   Sat Nov 14 13:42:20 2009 +0100
|
|     a second bug10 fix
|
* commit 3469e13f8d0fadeac5fcb6f388aca69497fd08a9
| Author: VonC <vonc@laposte.net>
| Date:   Sat Nov 14 13:41:50 2009 +0100
|
|     a first bug10 fix
|

gitk เยี่ยมมาก แต่บังคับให้ฉันออกจากเซสชั่นเชลล์ไปยังหน้าต่างอื่นในขณะที่การแสดง n ล่าสุดที่ทำเสร็จอย่างรวดเร็วมักจะเพียงพอ


ฉันเลือกวิธีนี้เช่นกัน แต่ฉันสร้างนามแฝงเพื่อให้การพิมพ์ "git graph" เหมือนกับการใช้งาน "git log --graph --decorate --oneline"
Will Pike

@ConnerPike ความคิดที่ดี ฉันมีนามแฝง 'lg' ด้วยตัวเอง: ดูstackoverflow.com/a/3667139/6309
VonC

35

Gitgเป็นเครื่องมือที่ยอดเยี่ยมสำหรับ Linux คล้ายกับ Gitx สำหรับ OS X เพียงแค่เรียกใช้ 'gitg' บนบรรทัดคำสั่งจากที่ใดก็ได้ภายในโครงสร้างต้นไม้ของที่เก็บของคุณ (เช่นเดียวกับ gitx)


3
ด้วยคำพูดมากมาย: gitg มีเมนูแบบเลื่อนลงที่สามารถเลือกสาขาที่จะเห็นภาพ เมนูแบบเลื่อนลงนี้มีตัวเลือก "ทั้งหมด"
Phluks

1
หรือคุณสามารถเริ่มต้นด้วยgitg --allหากคุณต้องการหลีกเลี่ยงการล้อเล่นในเมนูแบบเลื่อนลง
imolit

25

ฉันพบว่า "git-big-picture" มีประโยชน์มาก: https://github.com/esc/git-big-picture

มันสร้างกราฟ 2D ที่สวยงามโดยใช้ dot / graphviz แทนที่จะเป็น gitk และ "เพื่อน" ด้วยตัวเลือก -i มันจะแสดงจุดแยกและรวมการกระทำ แต่จะทำให้ทุกอย่างอยู่ในระหว่าง


ค่อนข้างง่ายต่อการใช้งานหากคุณไม่มีข้อผูกมัดและต้องการวิธีแก้ปัญหาที่ง่ายอาจลองใช้ดูก็ได้
Wiswit

ควรปรับขนาดด้วยจำนวนการคอมมิทติ้ง (ถ้าคุณใช้ -i) มันอาจไม่สามารถอ่านได้ถ้าคุณมีกิ่งไม้ที่ซับซ้อนและผสาน (แต่จากนั้นเครื่องมือใดไม่ได้)
Frank Osterfeld

1
ด้วยโครงการขนาดกลางของเราสิ่งนี้สร้างภาพขนาดใหญ่ที่มีเส้นจำนวนมาก ฉันสามารถ จำกัด ระดับความลึกที่จะไปได้หรือไม่ เช่นกระทำจาก N วันที่แล้วหรือมากกว่านั้น
Ondra Žižka

25

เครื่องมือบนเว็บที่ดีที่ใช้เป็นungit มันทำงานบนแพลตฟอร์มใด ๆ ที่ node.js & git รองรับ มีวิดีโอเกี่ยวกับวิธีการทำงานสำหรับผู้ที่พบสิ่งต่าง ๆ ที่ง่ายกว่าการอ่าน ...

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


21

มีลักษณะที่BranchMaster

ฉันเขียนมันเพื่อให้เห็นภาพโครงสร้างสาขาที่ซับซ้อนโดยการยุบคอมมิททั้งหมดระหว่างพวกเขาเป็นบรรทัดเดียว ตัวเลขหมายถึงจำนวนการกระทำ

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


1
นี่คือสิ่งที่ฉันกำลังมองหา มีคำสั่ง / เครื่องมือสำรองให้ทำเช่นนี้หรือไม่?
Aalex Gabi

3
@AalexGabi ใส่สิ่งนี้ลงใน gitconfig ของคุณมันทำสิ่งเดียวกัน แต่ในบรรทัดคำสั่ง gbranch = log --graph --simplify-by-decoration --pretty = รูปแบบ: '% C (สีเหลือง)% h% C (สีขาว)% d% C (ตัวหนาสีดำ)% ar% C (รีเซ็ต)% n '
kracejic

คุณได้รับข้อมูลเพื่อแสดงภาพสาขาอย่างไร
Snowfish

15

ไม่มีใครพูดถึง tig ? มันไม่ได้พับสาขาอย่าง "BranchMaster" แต่ ...

มันเร็ววิ่งในเทอร์มินัล

เนื่องจากมันรวดเร็ว (+ การควบคุมแป้นพิมพ์) คุณจะได้ UX ที่ยอดเยี่ยมมันเป็นเหมือนlsไดเรกทอรีของฉันที่มี git repository ""

https://jonas.github.io/tig/

มันมีทางลัดปกติใน/การค้นหาและอื่น ๆ

กราฟการแก้ไข

(ps เป็นเทอร์มินัลในพื้นหลังของภาพหน้าจอนี้ดูดีกว่าทุกวันนี้ แต่คอมพิวเตอร์ของฉันปฏิเสธที่จะจับภาพหน้าจอขออภัย)

(pps. ฉันใช้ gitkraken เป็นอย่างดีและมีการมองเห็นที่ชัดเจนจริงๆ แต่มันหนักกว่าtig)


ฉันเป็นคนรักเทอร์มินัลและ Tig (อินเตอร์เฟสโหมดข้อความสำหรับ Git) เป็นเครื่องมือที่ดีในการโต้ตอบกับที่เก็บ Git มันมีประโยชน์มากรวมถึงมุมมองกราฟและประวัติ Git ฉันแนะนำให้คนรักเทอร์มินัลเป็นเครื่องมือพิเศษสำหรับบรรทัดคำสั่ง Git
hermeslm

15

Tortoise Gitมีเครื่องมือที่เรียกว่า "Revision Graph" หากคุณใช้ Windows มันง่ายเหมือนคลิกขวาบน repo ของคุณ -> Tortoise Git -> กราฟการแก้ไข


1
มันเป็นคุณสมบัติที่ยอดเยี่ยมโดยใช้คอมไพล์เต่าเป็นเวลานาน แต่ไม่รู้จักคุณลักษณะนี้
kreamik

นี่เป็นวิธีที่ง่ายกว่า ขอบคุณ
Anoop

15

Giggleวาดกราฟที่ดีจริงๆ


Grittleก็เช่นกันถ้าคุณใช้OmniGraffle
New Alexandria

พยายามแล้วฉันจะเห็นบรรทัดต่อการส่งมอบและไม่ใช่บรรทัดต่อสาขา / แท็ก มันมีรายละเอียดมากเกินไปเมื่อคุณมีหลายสิบสาขา / แท็ก
Aalex Gabi

12

ฉันใช้นามแฝงต่อไปนี้

[alias]
    lol = log --graph --decorate --pretty=oneline --abbrev-commit
    lola = log --graph --decorate --pretty=oneline --abbrev-commit --all

มีข้อมูลเพิ่มเติมในรูปแบบสีมากกว่าชื่อแทนที่ฉันเห็นด้านบน ดูเหมือนว่าจะค่อนข้างทั่วไปดังนั้นคุณอาจมีโอกาสที่จะมีอยู่ในสภาพแวดล้อมของผู้อื่นหรือสามารถพูดถึงมันในการสนทนาโดยไม่ต้องอธิบาย

ด้วยภาพหน้าจอและคำอธิบายแบบสมบูรณ์ที่นี่: http://blog.kfish.org/2010/04/git-lola.html


12

สำหรับผู้ใช้ Mac ให้ชำระเงิน (ไม่ต้องใช้ pun) เครื่องมือฟรีโอเพนซอร์ส GitUp: http://gitup.co/

ฉันชอบวิธีแสดงกราฟมันชัดเจนกว่าเครื่องมืออื่น ๆ ที่ฉันเคยเห็น

โครงการอยู่ที่นี่: https://github.com/git-up/GitUp

ภาพหน้าจอ GitUp


นี่เป็นกราฟเดียวที่คุณเห็นกิ่งไม้บนแกน x และเวลาบนแกน y มันใช้งานง่ายมาก GitUp ยอดเยี่ยมมาก! macOS ไม่ใช่อีกแล้วดังนั้นฉันจึงเปลี่ยนมาใช้ Windows และจะต้องคิดถึง Gitup เป็นอย่างมาก
w00t

11

ฉันมีgit logนามแฝงนี้~/.gitconfigเพื่อดูประวัติกราฟ:

[alias]
l = log --all --graph --pretty=format:'%C(auto)%h%C(auto)%d %s %C(dim white)(%aN, %ar)'

ด้วยนามแฝงในสถานที่git lจะแสดงสิ่งนี้:

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

ใน Git 2.12 + คุณสามารถปรับแต่งสีเส้นของกราฟโดยใช้log.graphColorsตัวเลือกการกำหนดค่า

สำหรับรูปแบบล็อกก็คล้ายกับ--onelineมีการเพิ่มของชื่อผู้เขียน (เคารพ.mailmap) และวันที่ผู้เขียนญาติ โปรดทราบว่า%C(auto)ไวยากรณ์ซึ่งบอก Git ที่จะใช้สีเริ่มต้นสำหรับการกระทำกัญชา ฯลฯ ได้รับการสนับสนุนใน Git> = 1.8.3


1
นี่เป็นครั้งแรกที่ฉันได้เห็นวันผู้เขียน realtive และมันก็ค่อนข้างดี! ขอบคุณฉันจะเพิ่มที่ gitconfig ของฉันไป!
Simon C.

ผู้ใช้ windows ควรแทนที่เครื่องหมายคำพูดเดี่ยวด้วยเครื่องหมายคำพูดคู่
PierDipi

11

ฉันพบโพสต์บล็อกนี้ซึ่งแสดงวิธีรัดกุม:

git log --oneline --abbrev-commit --all --graph --decorate --color

ฉันมักจะสร้างนามแฝงสำหรับคำสั่งดังกล่าว:

alias gl='git log --oneline --abbrev-commit --all --graph --decorate --color'

และใช้ง่ายเพียง glและการใช้งานง่ายเพียงแค่

คุณสามารถเพิ่มนามแฝงในการกำหนดค่า git เปิด~/.gitconfigและเพิ่มบรรทัดต่อไปนี้ใน[นามแฝง]

[alias]
        lg = log --oneline --abbrev-commit --all --graph --decorate --color

และใช้มันเช่นนี้ git lg


8

ชื่อแทนส่วนตัวที่ฉันชอบผ่าน. gitconfig คือ:

graph = log --graph --color --all --pretty=format:"%C(yellow)%H%C(green)%d%C(reset)%n%x20%cd%n%x20%cn%x20(%ce)%n%x20%s%n"

6
คำอธิบายเล็กน้อยว่าคำสั่งใดที่ดูเหมือนว่าจะยอดเยี่ยม
Max

8

สำหรับผู้ที่ใช้โปรแกรมแก้ไขข้อความ VSCodeให้พิจารณาส่วนขยายประวัติ Gitโดย D. Jayamanne:

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


ส่วนขยายนี้ค่อนข้างช้าในความคิดของฉัน นอกจากนี้ยังไม่อัปเดตอัตโนมัติและดูไม่เป็นเงา แต่มันก็ไม่ได้งานที่ดีแสดงกระทำต้นไม้ ...
aljazerzen

2
ส่วนขยายอื่นสำหรับ Visual Studio Code คือGit Graphโดย mhutchie ฉันใช้สิ่งนี้พร้อมกับ GitLens
Josef.B

7

Gitx เป็นเครื่องมือสร้างภาพที่ยอดเยี่ยมหากคุณเกิดขึ้นกับ OS X


3
gitk (สำหรับทุกคน) คล้ายกันมาก ไม่เหมือนกันทุกประการ แต่คล้ายกันมาก
xero

มีส้อมสองอันของ Gitx - อันนี้ (rowanj) ดูเหมือนจะดีที่สุดในขณะนี้
rjmunro

7

คำสั่งบันทึก git อื่น หนึ่งนี้กับคอลัมน์ความกว้างคงที่ :

git log --graph --pretty=format:"%x09%h | %<(10,trunc)%cd |%<(25,trunc)%d | %s" --date=short

6

SmartGitตรวจสอบ มันเตือนฉันอย่างมากเกี่ยวกับการแสดงข้อมูลเป็นสาขาของTortoiseHgและฟรีสำหรับการใช้งานที่ไม่ใช่เชิงพาณิชย์


3

บน Windows มีเครื่องมือที่มีประโยชน์มากที่คุณสามารถใช้: ส่วนขยาย git มันเป็นเครื่องมือ gui และทำให้การทำงานคอมไพล์ง่ายมาก

นอกจากนี้ยังเปิดแหล่งที่มา

http://gitextensions.github.io


2

ฉันลองแล้ว--simplify-by-decorationแต่การรวมทั้งหมดของฉันไม่แสดง ดังนั้นฉันเพียงแค่ตัดออกจากบรรทัดที่ไม่มีสัญลักษณ์ "\" และ "/" ที่ส่วนหัวในขณะที่รักษาบรรทัดด้วย "(" ระบุสาขาทันทีหลังจากนั้นเมื่อแสดงประวัติสาขาฉันไม่สนใจในการแสดงความคิดเห็นทั่วไปดังนั้น ฉันลบมันด้วยฉันท้ายด้วยนามแฝงของเชลล์ต่อไปนี้

gbh () { 
    git log --graph --oneline --decorate "$@" | grep '^[^0-9a-f]*[\\/][^0-9a-f]*\( [0-9a-f]\|$\)\|^[^0-9a-f]*[0-9a-f]*\ (' | sed -e 's/).*/)/'
}

2

เราจะทำให้มันซับซ้อนกว่านี้ได้ไหม?

วิธีการเกี่ยวกับบันทึกคอมไพล์ที่เรียบง่าย - ทั้งหมด - ตกแต่ง - ออนไลน์ - กราฟฟิค (จดจำสุนัข = - ทั้งหมด - ตกแต่ง --Oneline - กราฟ)


1
นี่เป็นคำตอบเดียวกับที่ยอมรับ อย่างไรก็ตามอุปกรณ์ประกอบฉากสำหรับช่วยในการจำ
aljgom

1

เว็บไซต์อย่างเป็นทางการของ Git เกณฑ์เครื่องมือ GUI เฉพาะแพลตฟอร์มของบุคคลที่สาม กดที่นี่ git GUI Tools สำหรับ Linux Platform

ฉันได้ใช้gitgและGitKrakenสำหรับแพลตฟอร์มลินุกซ์ ทั้งสองเข้าใจต้นไม้กระทำดี

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