【问题标题】:Unable to show a Git tree in terminal无法在终端中显示 Git 树
【发布时间】:2010-11-07 01:17:29
【问题描述】:

Killswitchcollective.com's old article, 30 June 2009,有以下输入和输出

git co master
git merge [your_branch]
git push

upstream    A-B-C-D-E            A-B-C-D-E-F-G
                 \        ---->               \
your branch       C-D-E                        G

我很感兴趣如何在不使用 OS/X 中的 Gitk 或 Gitx 的情况下在终端中获得提交的树状视图。

如何在终端中获得提交的树状视图?

【问题讨论】:

标签: git terminal tree console revision-history


【解决方案1】:

如何在终端中获得提交的树状视图?

git log --graph --oneline --all

是一个好的开始。

您可能会收到一些奇怪的字母。它们是颜色和结构的 ASCII 码。要解决此问题,请将以下内容添加到您的 .bashrc

export LESS="-R"

这样你就不需要使用 Tig 的 ASCII 过滤器了

git log --graph --pretty=oneline --abbrev-commit | tig   // Masi needed this 

文章text-based graph from Git-ready包含其他选项:

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

关于你提到的那篇文章,我会选择Pod's answer: ad-hoc hand-made output。


Jakub Narębski 在 cmets tig 中提到,这是一个基于 ncurses 的 git 文本模式界面。见their releases
它在 2007 年添加了 a --graph option

【讨论】:

  • 我刚刚在我的 repo 上测试了它。它可以工作,但我在 Windows 上使用 MSysGit1.6.3。
  • files.getdropbox.com 在这里工作时被屏蔽 :( 大约一小时后我会看到你的照片,该回家了。
  • @Vonc:我现在为第一个命令输入了两个。对于第二个命令,我得到了与图片中类似的视图。
  • 还有 'tig',git 的文本模式界面(使用 ncurses),在 git-log 有 '--graph' 选项之前,它在终端中有图形历史视图。
  • 我发现--decorate 在这种显示中也是不可或缺的——它会在缩写提交名称旁边显示参考名称(分支、远程和本地)。
【解决方案2】:

一种解决方案是在您的.gitconfig 中创建一个别名并轻松调用它:

[alias]
    tree = log --graph --decorate --pretty=oneline --abbrev-commit

当你下次调用它时,你会使用:

git tree

要将其放入您的 ~/.gitconfig 而无需对其进行编辑,您可以这样做:

git config --global alias.tree "log --graph --decorate --pretty=oneline --abbrev-commit"  

(如果你不使用 --global 它将把它放在你当前 repo 的 .git/config 中。)

【讨论】:

  • 这不是默认别名怎么办?我想这会让 Git 的 CLI 使用起来稍微不那么令人恼火,我们不能这样......
【解决方案3】:
git log --oneline --decorate --all --graph

包含分支名称的可视化树。

使用它来添加它作为别名

git config --global alias.tree "log --oneline --decorate --all --graph"

你用它来称呼它

git tree

【讨论】:

  • 非常好,这个。我将它与less -S 结合使用,如here 所述,以防止换行混淆树。
  • 塞巴斯蒂安:ty 4 alias
【解决方案4】:

tig

如果你想要一个交互式树,你可以使用tig。 OSX 可以通过brew 安装,Linux 可以通过apt-get 安装。

brew install tig
tig

这就是你得到的:

【讨论】:

  • 你能得到像 Tig 目前在 VonC 的回答中那样的树吗?我们在 VonC 的回答中仅使用 Tig 作为 Ascii 过滤器。
【解决方案5】:

我建议任何人写下完整的命令

git log --all --decorate --oneline --graph

而不是创建别名。

把命令记在脑子里很好,这样你就知道了 即在更换机器时不要依赖别名。

【讨论】:

  • 其实是git log --all --decorate --oneline --graph,在助记符git log a dog之后;)
  • @VonC 最后的结果是一样的。无论如何,我同意你的看法。感谢您的反馈。
  • 是的,这就是我之前评论结尾处的笑脸;) 试图(不完美地)传达的内容:您可以按照您想要的任何顺序使用这些选项。我只是觉得“记录一只狗”很有趣:)
  • 或者你可以scp ~/.bashrc root@remote:~/ 并且你的别名会快速移动。
【解决方案6】:

保持命令简短会让它们更容易记住:

git log --graph --oneline

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    • 2021-12-05
    • 2021-04-16
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多