获取我所在的分支的历史记录

10

我需要查看我所使用过的分支的历史记录。例如,我有4个分支:master、b-1、b-2、b-1-1。分支"b-1-1"是分支"b-1"的子分支。我最初在master分支上,然后在b-1分支上,然后在b-1-1分支上,然后在b-2分支上,然后又回到了b-1-1分支。我使用的分支历史记录应该如下所示:

  • b-1-1
  • b-2
  • b-1-1
  • b-1
  • master

在git中是否可以实现?如果可以,那么如何实现? 我已经尝试过查看git日志,但这不是我想要的。

3个回答

15
看一下 `git reflog` 来检查 `HEAD` 位置的历史。
还有 `git reflog ` 可以查看特定分支的历史。
请查阅文档 here
(奖励)
如果在您的情境中有用,您还可以使用@{-<n>}结构来创建一个别名来提取它们。
$ git config alias.last '!f() { for i in $(seq 1 $1); do git name-rev --name-only --exclude=refs/tags/\* @{-$i}; done; }; f'

$ git last 3
# outputs the 3 last checked out branches

3
你的别名建议真的很有用,可惜它不是正常的git命令的一部分。我会使用别名名称branchistory。如果可以的话,我会给你50分! 你还可以添加到别名<< |sort|uniq >>中以删除重复项... - Martin P.
1
@MartinP。我没有将其导入到sort -u中,因为分支顺序也可能很有用,但是是的,在某些情况下它会更好。 - Romain Valeri

5

使用一些 grep 过滤的 git reflog 命令调用似乎对我有用:

git reflog | grep checkout | grep -o 'to .*$' | grep -o ' .*$' | less

例如:

 b2
 master
 b1
 master
 b2
 b1
 b2
...

2
我认为你无法按照你在问题中所阐述的那种方式看到已检出的分支以及它们的顺序。分支是一个指针,只有在提交时才能更改该指针。
例如,如果你:
- 检出现有的分支(git checkout abc) - 查看其日志(git log -n 10) - 检出另一个现有的分支 xyz(git checkout xyz
那么 Git 将不会记住你正在检出 abc 分支。
话虽如此,你可以使用以下命令查看最近三天内完成的提交:
git log --since="3 days ago" --author=<HERE_COMES_YOUR_NAME_IN_GIT> --all

This --since 参数非常灵活,可以使用 1 day ago、精确时间、1 week ago 等值,查看文档以及 this SO thread
另一个有趣的选项是最基本的使用方法:git for-each-ref --sort=-committerdate refs/heads/
该命令将按降序打印所有分支中的所有提交。SO 中已经有了 thread,提供了比我更多可能使用此命令的选项,请务必查看。

2
请执行以下命令:git reflog|awk '/: checkout:/{print $NF}' - jthill
@jthill 我本来想挑剔一下 "如果 OP 没有使用 git checkout 而是用了 git switch 呢?嗯?嗯?" ...然后我测试了一下,发现在 reflog 条目方面没有任何区别:64ea7a0f3 (HEAD -> dev) HEAD@{0}: checkout: moving from somebranch to dev。所以谢谢你 :-) - Romain Valeri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接