फैशन की तरह पेड़ में गिट शाखा का उत्पादन


160

अभी, जब मैं "गिट शाखा" टाइप करता हूँ

यह एक अनियंत्रित क्रम में मेरी शाखाओं को सूचीबद्ध करता है।

क्या होगा अगर मैं "git शाखा" एक पेड़ की तरह fasion, somethign की तरह में अपने उत्पादन सूचीबद्ध सूचीबद्ध होगा:

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

यहाँ पर, फू और बार को मास्टर से शाखित किया गया था; foo1 & foo2 को फू से शाखा दी गई थी; बार 4 को बार से निकाल दिया गया था।

क्या यह पूरा करना आसान है?

[कमांड लाइन उपयोगिताओं। यह मेरे zsh / vim वर्कफ़्लो में फिट होने की आवश्यकता है।]


यहाँ कोई भी उत्तर (मेरा खुद का शामिल) मुझे लगता है कि आप वास्तव में चाहते हैं, और जो मुझे पता है कि मैं चाहता हूँ के लिए एक पर्याप्त समाधान प्रदान करते हैं। मौका मिलने पर इसे हल करने के लिए एक नई उपयोगिता लिखने जा रहा हूं। शायद इसे ही कहेंगे git_tree। यह कुछ इस तरह का उत्पादन करेगा arc flow: stackoverflow.com/questions/54227968/… । शायद किसी दिन मैं इसे भी खुद में ही विलीन कर लूं।
गेब्रियल स्टेपल्स

यह व्यक्ति एक ही चीज़ चाहता है: reddit.com/r/git/comments/282c1f/…
गैब्रियल स्टेपल्स

git log --graphमुझे लगता है कि पर्याप्त है।
डॉनसॉन्ग

जवाबों:


203

नीचे दिए गए जवाब का उपयोग करता है git log:

मैंने 2009 में " टर्मिनल में गिट के पेड़ को दिखाने में असमर्थ " के साथ एक समान दृष्टिकोण का उल्लेख किया :

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

लेकिन मेरे द्वारा उपयोग किया जा रहा पूर्ण "" जीआईटी लॉग -ग्राफ का उपयोग करके टैग का नाम और शाखा का नाम कैसे प्रदर्शित करें "(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-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 आपको दिखाता है:

  • यदि आपकी शाखा रिमोट रेपो से संबंधित है, यदि यह एक ट्रैकिंग शाखा है।
  • यदि आपकी शाखा गैर-सुविधा ("संस्करण") शाखाओं से संबंधित है, यदि यह एक सुविधा शाखा है।
  • आपकी शाखा फीचर शाखाओं से कैसे संबंधित है, अगर यह संस्करण शाखा है

अपने सुंदर प्रारूप की भिन्नता का उपयोग करते हुए, जो लेखक ईमेल को% ae का उपयोग करके दिखाता है। इसके अलावा मैं hg के स्मार्टलॉग से मिलता जुलता उपनाम "sl" को पसंद करता हूं।
फियोरिक्स

git-wtfउपकरण के लिंक के लिए बहुत बहुत धन्यवाद , यह बहुत उपयोगी है। अनिवार्य रूप से निष्कर्ष निकालने के लिए लगता है कि मैं एक फैंसी git logपेड़ को घूर रहा हूँ , लेकिन एक अच्छा सारांश में।
ल्यूक डेविस

मैं एक रास्ता खोजने की उम्मीद कर रहा था ताकि चेकआउट शाखा को यह दिखाया जाए कि किस शाखा से इसकी जाँच की गई थी
चांग झाओ

@ चांगझाओ "माता-पिता की शाखा को खोजने" के समान है, और यह करना आसान नहीं है: stackoverflow.com/a/3162929/6309 , stackoverflow.com/a/56452713/6309
वॉन

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 या इस तरह की चीज के लिए जाने का तरीका है।
21

यह मूल पर शाखाओं को प्रदर्शित करता है। क्या स्थानीय शाखाओं के लिए इसे प्रदर्शित करने का कोई तरीका है?
जेफ

@ जेफ के --allसाथ की जगह --branches --tagsशायद ऐसा करेगी।
22

सही जवाब। मैं जो खोज रहा था, वह मुझे यहां मिल गया। महान।
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मैक में पता नहीं लगाया । यदि आपके पास कोई सुझाव है, तो कृपया मुझे बताएं। मैंने Github Desktopकमांड लाइन पर काम करने के लिए प्यार करना शुरू कर दिया ।
AMIC MING

6

उबंटू पर परीक्षण किया गया:

sudo apt install git-extras
git-show-tree

यह यहां 2 सबसे अधिक उत्कीर्ण उत्तरों के समान प्रभाव पैदा करता है।

स्रोत: http://manpages.ubuntu.com/manpages/bionic/man1/git-show-tree@.1.html


इसके अलावा, यदि आपने अर्नस्टिस्ट स्थापित किया है (सुधार: अर्नस्ट के अर्नस्टिस्ट का कांटा स्थापित - स्थापना निर्देशों के लिए यहां इस उत्तर के नीचे देखें ), arc flowअपस्ट्रीम निर्भरता का एक सुंदर निर्भरता वाला पेड़ दिखाता है (यानी: जो पहले arc flow new_branchया मैन्युअल रूप से माध्यम से सेट किए गए थे git branch --set-upstream-to=upstream_branch)।

बोनस गिट चाल:

सम्बंधित:

  1. `आर्क ग्राफ्ट` और` आर्क पैच` में क्या अंतर है?

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.