ファッションのようなツリーのgitブランチの出力


160

現在、「git branch」と入力すると

それは私のブランチを任意の順序でリストします。

私が好むのは、「gitブランチ」がfasionのようなツリーに出力をリストした場合です。

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

ここで、fooとbarはマスターから分岐しました。foo1とfoo2はfooから分岐しました。bar4はbarから分岐しました。

これは簡単に達成できますか?

[コマンドラインユーティリティのみ。これは私のzsh / vimワークフローに適合する必要があります。]


ここでの答え(私自身も含む)はどれも、あなたが本当に望んでいると思うもの、そして私が知りたいと思っているものに対して適切な解決策を提供していないようです。機会があれば、これを解決する新しいユーティリティを作成します。おそらくそれを呼び出すでしょうgit_tree。これは、次のように出力arc flowします:stackoverflow.com/questions/54227968/…。多分いつか私はそれをgit自体にマージすることさえできます。
ガブリエルステープルズ

:この人は、あまりにも同じことをしたいようだreddit.com/r/git/comments/282c1f/...
ガブリエル・ステープルズ

git log --graph十分だと思います。
DawnSong

回答:


203

以下答えは以下を使用しますgit log

2009年に「ターミナルでGitツリーを表示できません」で同様のアプローチを述べました:

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 あなたを示しています:

  • 追跡ブランチの場合、ブランチとリモートリポジトリの関係。
  • 機能ブランチの場合、ブランチが非機能(「バージョン」)ブランチにどのように関連しているか。
  • バージョンブランチの場合、ブランチと機能ブランチの関係

%aeを使用して、著者の電子メールも表示する、きれいなフォーマットのバリエーションを使用している。また、hgのsmartlogに似た「sl」でエイリアスを呼び出すことを好みます。
fiorix

git-wtfツールへのリンクをたくさんありがとう、それはめちゃくちゃ便利です。私が派手なgit log木を見つめることから引き出す結論を本質的に破壊するようですが、素晴らしい要約です。
ルークデイビス

チェックアウトブランチがチェックアウトされたブランチを表示する方法を見つけたいと思っていました
Chang Zhao

「親ブランチを見つけること」に似ており、それを行うことは容易ではない@ChangZhao:stackoverflow.com/a/3162929/6309stackoverflow.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 2015

完璧な答え。探していたものをここで見つけました。すごい。
AMIC MING 2016

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 2016

6

Ubuntuでテスト済み:

sudo apt install git-extras
git-show-tree

これは、ここで最も投票された2つの回答と同様の効果を生み出します。

出典:http : //manpages.ubuntu.com/manpages/bionic/man1/git-show-tree.1.html


また、arcanistがインストールされている場合(修正:Uberのarcanistのフォークがインストールされています- インストール手順については、この回答の下部を参照しください)、arc flow上流の依存関係の美しい依存関係ツリーが表示されます(つまり、以前にarc flow new_branchまたはを介して手動で設定されましたgit branch --set-upstream-to=upstream_branch)。

ボーナスgitトリック:

関連:

  1. 「アークグラフト」と「アークパッチ」の違いは何ですか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.