私は自分のマシン上でgitを単独でプレイしていますが、すべてのブランチとコミットのメンタルモデルを維持するのは困難です。 git log
を実行すると自分のいる場所からコミット履歴を見ることができることはわかっていますが、ブランチの地形全体を表示する方法はありますか。
.-A---M---N---O---P
/ / / / /
I B C D E
\ / / / /
`-------------'
誰かが一緒に来て私のリポジトリを手に入れようとすると、実際に起こっていたことを正確に解決するのが困難になるように感じます。
私はAccuRevの ストリームブラウザの影響を受けていると思います ...
git log --graph
またはgitk
。 (両方とも--all
も受け付けます。これは現在のブランチだけでなくすべてのブランチを表示します。)
編集: /ブランチ名とコンパクトビューについては、git log --graph --decorate --oneline
を試してください。
私はいつも使う
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
私は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 lg2
は次のようになります。
git lg3
は次のようになります。
注: stackoverflow.com/questions/1057564/pretty-git-branch-graphs からの回答がコピーされ、改良されました。歴史的な理由でもう片方の質問にコピーを残しました - それは今閉まっていて、そして答えは他のたくさんの答えによって参照されます。
(git logやgitkに基づいた)これらのレシピのどれにでも、--simplify-by-decoration
を追加して履歴の興味を引かない線形部分を折りたたむことができます。これにより、より多くのトポロジが一度に表示されます。私は今、この選択肢がなければ理解できないだろう大きな歴史を理解することができます!
それがあるべきほど有名であるように思われないので私はこれを掲示する必要性を感じました。履歴を視覚化することに関するStack Overflowの質問のほとんどには表示されず、検索するにはかなりの手間がかかりました。 Debianバグレポート で私はやっとそれを見つけました。 Stack Overflowに関する最初の言及は この答え Antoine Pelisseによると思われます。
Gitk
はいつか読むのが面倒です。
GitVersionTree と書くように私をやる気にさせる。
"私の時間の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
はブランチの全履歴を見るでしょう。私は、 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個のコミットを素早く表示するだけで十分な場合が多いのですが、シェルセッションから別のウィンドウに移動するよう強制されます。
Gitg はGitx for OS Xに似たLinux用の素晴らしいツールです。リポジトリのツリー構造内のどこかからコマンドラインで 'gitg'を実行するだけです(gitxと同じ)。
私は "git-big-picture"がとても便利だと思った: https://github.com/esc/git-big-picture
それは、gitkやその仲間たちが作り出す、むしろ直線的な「一次元」のビューの代わりに、dot/graphvizを使ってきれいな2Dグラフを作成します。 -iオプションを指定すると、分岐点とマージコミットを表示しますが、途中のものはすべて除外します。
BranchMaster をご覧ください。
私は、複雑なブランチ構造を視覚化するために、それらの間のすべてのコミットを1行に折りたたむことによって書きました。数字はコミットの数を示します。
Giggle Niceグラフを描く
Tortoise Git には "Revision Graph"というツールがあります。 Windowsを使用している場合は、レポ - > Tortoise Git - >リビジョングラフを右クリックするのと同じくらい簡単です。
私は以下のエイリアスを使います。
[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
誰もtig
を言わなかった? "BranchMaster"のように枝を折りたたむことはしませんが...
それは速いです、ターミナルで走ります。
それはとても速い(+キーボードコントロール)ので、あなたは素晴らしいUXを手に入れることになるので、それはgitリポジトリを含むディレクトリに対する私の "ls
"のようなものです。
通常のショートカット、検索するための/
などがあります。
(ps。これはこのスクリーンショットの背景にある端末です、最近は良く見えますが、私のコンピュータはスクリーンショットを撮ることを拒否しています、申し訳ありません)
(pps。私もgitkrakenを使っていて、見た目ははっきりしていますが、tig
よりはるかに重いです)
グラフの履歴を見るために、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
configurationオプションを使ってグラフの線の色をカスタマイズすることさえできます。
ログのフォーマットに関しては、 --oneline
に似ていますが、 作者名 (.mailmap
を尊重します)と 相対作者日付 が追加されています。コミットハッシュなどにデフォルトの色を使用するようGitに指示する%C(auto)
構文は、Git> = 1.8.3 でサポートされていることに注意してください。
Macユーザーの方は、無料のオープンソースツールGitUpをチェックアウトしてください(当たり前のことです): http://gitup.co/
私はグラフが表示される方法が好きです、それは私が見た他のいくつかのツールよりも明らかです。
プロジェクトはここにあります: https://github.com/git-up/GitUp
私は見つけました このブログ記事 は簡潔な方法を示しています:
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
VSCodeテキストエディタ を使用している人は、 Git History Extension D. Jayamanneによる/を検討してください。
もしあなたがOS X上にいるのなら、Gitxも素晴らしい視覚化ツールです。
別のgit logコマンド 固定幅カラム :
git log --graph --pretty=format:"%x09%h | %<(10,trunc)%cd |%<(25,trunc)%d | %s" --date=short
私の個人的なお気に入りのエイリアスは、.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"
古い投稿ですが、 SmartGit
をチェックしてください。これは、Tortoise HGブランチのビジュアライゼーションを非常に思い出させ、非営利目的での使用は無料です。
Windowsには非常に便利なツールがあります:git extensions。それはguiツールであり、git操作をとても簡単にします。
またオープンソースです。
もっと複雑にできますか。
単純なgit log --all --decorate --oneline --graphはどうでしょうか(A Dog = --All --Decorate --Oneline --Graphを覚えておいてください)
私は--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/).*/)/'
}
Gitのオフィシャルサイトでは、サードパーティプラットフォーム固有のGUIツールをいくつか紹介しました。ここをクリック Linuxプラットフォーム用git GUIツール
私はLinuxプラットフォームでgitg
とGitKraken
を使いました。どちらもコミットツリーを理解するのに良い