web-dev-qa-db-ja.com

Gitでブランチトポロジを視覚化する

私は自分のマシン上でgitを単独でプレイしていますが、すべてのブランチとコミットのメンタルモデルを維持するのは困難です。 git logを実行すると自分のいる場所からコミット履歴を見ることができることはわかっていますが、ブランチの地形全体を表示する方法はありますか。

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

誰かが一緒に来て私のリポジトリを手に入れようとすると、実際に起こっていたことを正確に解決するのが困難になるように感じます。

私はAccuRevの ストリームブラウザの影響を受けていると思います ...

778
Benjol

git log --graphまたはgitk。 (両方とも--allも受け付けます。これは現在のブランチだけでなくすべてのブランチを表示します。)

編集: /ブランチ名とコンパクトビューについては、git log --graph --decorate --onelineを試してください。

952
jrockway

私はいつも使う

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

色付き(シェルがBashの場合):

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

これは、次のようにテキストベースの表現を出力します。

* 040cc7c       (HEAD, master) Mannual 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 succesfully
| *   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を使うこともできますが、コミットメッセージを数字に結びつけるでしょう。これは私見には劣ります)。

このコマンドへのショートカットを作成するには、~/.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"

しかし、 声を出して話しかける のようにコメントを書くので、このような長いフォーマットコマンドは覚えにくいです。通常、~/.gitconfigファイルに入れてもかまいませんので、問題ありません。ただし、設定ファイルを変更できないリモートマシンにログインしなければならない場合は、もっとシンプルで速いタイプのバージョンを使用できます。

git log --graph --oneline
452
P Shved

私は3つのエイリアス (そしてすぐに使えるように4つのエイリアス - エイリアス) を持っています - 私は通常私の~/.gitconfigファイルを使います

[alias]
    lg = !"git lg1"
    lg1 = !"git lg1-specific --all"
    lg2 = !"git lg2-specific --all"
    lg3 = !"git 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は次のようになります。

git lg1

git lg2は次のようになります。

git lg2

git lg3は次のようになります。

git lg3

注: stackoverflow.com/questions/1057564/pretty-git-branch-graphs からの回答がコピーされ、改良されました。歴史的な理由でもう片方の質問にコピーを残しました - それは今閉まっていて、そして答えは他のたくさんの答えによって参照されます。

377

(git logやgitkに基づいた)これらのレシピのどれにでも、--simplify-by-decorationを追加して履歴の興味を引かない線形部分を折りたたむことができます。これにより、より多くのトポロジが一度に表示されます。私は今、この選択肢がなければ理解できないだろう大きな歴史を理解することができます!

それがあるべきほど有名であるように思われないので私はこれを掲示する必要性を感じました。履歴を視覚化することに関するStack Overflowの質問のほとんどには表示されず、検索するにはかなりの手間がかかりました。 Debianバグレポート で私はやっとそれを見つけました。 Stack Overflowに関する最初の言及は この答え Antoine Pelisseによると思われます。

216
Andrew

Gitkはいつか読むのが面倒です。

enter image description here

GitVersionTree と書くように私をやる気にさせる。

enter image description here

65
checksum

"私の時間の99.999%はgit lgによる歴史を探しており、0.001%はgit logによるものです。"

便利な2つのログエイリアスを共有したいだけです。 (.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はブランチの全履歴を見るでしょう。
47
Yeo

私は、 git log を使って、以下のようにします。

 git log --graph --oneline --branches

(同様にリモートブランチを見るために--allと一緒に)

最近のGitリリースで動作します: since 1.6.3 を導入( Thu、2009年5月7日

  • logファミリーのコマンドに対する "--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 <[email protected]>
| Date:   Sat Nov 14 13:42:20 2009 +0100
|
|     a second bug10 fix
|
* commit 3469e13f8d0fadeac5fcb6f388aca69497fd08a9
| Author: VonC <[email protected]>
| Date:   Sat Nov 14 13:41:50 2009 +0100
|
|     a first bug10 fix
|

gitkはすばらしいのですが、最後のn個のコミットを素早く表示するだけで十分な場合が多いのですが、シェルセッションから別のウィンドウに移動するよう強制されます。

42
VonC

Gitkraken - トポロジーを分かりやすく表示するクロスプラットフォームのGUIを見てください。

Topology

ここにいくつかの高度な機能に関する簡単な ビデオチュートリアル があります。

40
pylang

Gitg はGitx for OS Xに似たLinux用の素晴らしいツールです。リポジトリのツリー構造内のどこかからコマンドラインで 'gitg'を実行するだけです(gitxと同じ)。

32
Jack Senechal

私は "git-big-picture"がとても便利だと思った: https://github.com/esc/git-big-picture

それは、gitkやその仲間たちが作り出す、むしろ直線的な「一次元」のビューの代わりに、dot/graphvizを使ってきれいな2Dグラフを作成します。 -iオプションを指定すると、分岐点とマージコミットを表示しますが、途中のものはすべて除外します。

23
Frank Osterfeld

Webベースの素晴らしいツールは ungit です。 node.jsがサポートしているプラ​​ットフォームならどれでも動作します。そのようなことを読むよりも簡単であると感じる人たちのためにそれがどのように働くかの ビデオ があります...

enter image description here

23
Sardathrion

BranchMaster をご覧ください。

私は、複雑なブランチ構造を視覚化するために、それらの間のすべてのコミットを1行に折りたたむことによって書きました。数字はコミットの数を示します。

enter image description here

18
stroyer

Giggle Niceグラフを描く

14
Renat

Tortoise Git には "Revision Graph"というツールがあります。 Windowsを使用している場合は、レポ - > Tortoise Git - >リビジョングラフを右クリックするのと同じくらい簡単です。

13
Christian Adam

私は以下のエイリアスを使います。

[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
Lokist

誰もtigを言わなかった? "BranchMaster"のように枝を折りたたむことはしませんが...

それは速いです、ターミナルで走ります。

それはとても速い(+キーボードコントロール)ので、あなたは素晴らしいUXを手に入れることになるので、それはgitリポジトリを含むディレクトリに対する私の "ls"のようなものです。

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

通常のショートカット、検索するための/などがあります。

The revision graph

(ps。これはこのスクリーンショットの背景にある端末です、最近は良く見えますが、私のコンピュータはスクリーンショットを撮ることを拒否しています、申し訳ありません)

(pps。私もgitkrakenを使っていて、見た目ははっきりしていますが、tigよりはるかに重いです)

11
wires

グラフの履歴を見るために、git log~/.gitconfigというエイリアスがあります。

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

エイリアスが設定されていると、git lは次のようになります。

enter image description here

Git 2.12 +では log.graphColors configurationオプションを使ってグラフの線の色をカスタマイズすることさえできます。

ログのフォーマットに関しては、 --oneline に似ていますが、 作者名 .mailmapを尊重します)と 相対作者日付 が追加されています。コミットハッシュなどにデフォルトの色を使用するようGitに指示する%C(auto)構文は、Git> = 1.8.3 でサポートされていることに注意してください。

9
Eugene Yarmash

Macユーザーの方は、無料のオープンソースツールGitUpをチェックアウトしてください(当たり前のことです): http://gitup.co/

私はグラフが表示される方法が好きです、それは私が見た他のいくつかのツールよりも明らかです。

プロジェクトはここにあります: https://github.com/git-up/GitUp

GitUp screenshot

9
Edward T

私は見つけました このブログ記事 は簡潔な方法を示しています:

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

私は通常上記のコマンドのエイリアスを作成します。

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

そして単純にglを使うだけです。

Git設定にエイリアスを追加することもできます。 ~/.gitconfigを開き、 [alias] に次の行を追加します。

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

そしてそれを次のように使ってください:git lg

7
Sadegh

VSCodeテキストエディタ を使用している人は、 Git History Extension D. Jayamanneによる/を検討してください。

enter image description here

7
pylang

もしあなたがOS X上にいるのなら、Gitxも素晴らしい視覚化ツールです。

6
kEND

別のgit logコマンド 固定幅カラム

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

私の個人的なお気に入りのエイリアスは、.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
xero

古い投稿ですが、 SmartGit をチェックしてください。これは、Tortoise HGブランチのビジュアライゼーションを非常に思い出させ、非営利目的での使用は無料です。

Windowsには非常に便利なツールがあります:git extensions。それはguiツールであり、git操作をとても簡単にします。

またオープンソースです。

http://gitextensions.github.io

2
loneshark99

もっと複雑にできますか。

単純なgit log --all --decorate --oneline --graphはどうでしょうか(A Dog = --All --Decorate --Oneline --Graphを覚えておいてください)

1
pixel

私は--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/).*/)/'
}
1
Isaac To

Gitのオフィシャルサイトでは、サードパーティプラットフォーム固有のGUIツールをいくつか紹介しました。ここをクリック Linuxプラットフォーム用git GUIツール

私はLinuxプラットフォームでgitgGitKrakenを使いました。どちらもコミットツリーを理解するのに良い

0
rookie4evr