Git中执行的命令历史或日志

136

有没有办法在Windows下跟踪我在Git中使用的命令? 我想查看我已应用于存储库的所有命令。

我希望能够浏览命令历史记录并找出如果发生问题,则导致问题的命令。

查看提交历史记录是一件事,但是对于保留其他操作的历史记录(例如创建分支或添加远程),这些是否被跟踪?


3
这有点离题,但如果你查看.git/logs,你会看到每个分支指向的提交历史。 - Nayuki
1
@Nayuki 由于push不会改变本地分支的状态,因此reflog显然不会存储push操作,因此查看.git/logs/refs/remotes/*/*是查看您的push历史记录的唯一方法。 - Kyle Strand
7个回答

222

你可以使用 git-reflog 命令来查看历史记录,这里有一个 示例:

git reflog

26
虽然 git reflog 命令可以显示你的 HEAD 所在的所有位置,但它实际上不会显示所有的 Git 命令。那些不移动 HEAD 的 Git 命令(例如 git branch -D my_precious_branch)将不会在其中显示。 - Yonatan
@Yonatan,你不能用 git reflog --all 得到它吗? - combinatorist
2
@combinatorist 尝试添加一个远程仓库(就像 OP 给出的例子):git remote add foo bar。它不会出现在 git reflog --all 中,因为它不会修改 HEAD 指针。 - Yonatan
1
git reflog 不会显示像 git status 等命令,无论是否带有 --all 参数。 - questionto42
1
@questionto42 这是预期的。git status 只读取数据 - 它不会更改任何内容,因此不会造成任何损害或问题。Git 本身不记录执行的所有命令。reflog 文档说:“记录分支和其他引用的末尾在本地存储库中更新的时间”。记录所有内容的 hackish 方法是使用 shell 脚本(或其他)替换 git 二进制文件,记录所有参数,然后调用原始二进制文件转发相同的参数。 - jweyrich

82

您的命令记录可能会保存在您的shell历史记录中。

history

如果您不喜欢看到执行命令列表飞过,请将列表导出到文件中。

history > path/to/file

通过使用grep命令将其与导出转储管道连接,您可以限制只显示其中包含“git”的命令。

history | grep "git " > path/to/file

历史记录可能包含以下格式的行

518  git status -s
519  git commit -am "injects sriracha to all toppings, as required"

使用数字,您可以在命令前加上感叹号重新执行该命令。

$ !518
git status -s

12
在你的终端中输入history。虽然它不是技术上的git,但我认为这就是你想要的。

10
如果您使用的是CentOS或其他Linux版本,则只需在提示符处按Ctrl+R并键入git
如果您一直按Ctrl+R,则会通过您的历史记录进行反向搜索,寻找以git开头的命令。

6

如果您使用Windows PowerShell,则可以输入“git”,然后按F8键。 继续按F8可以循环浏览所有git命令。

或者,如果您使用cygwin,则可以使用^R执行同样的操作。


在正常的Windows会话中,您可以使用F7键获取一个小窗口,其中列出了该会话中输入的所有命令。 - milso

1
我发现在我的git bash版本"2.24.0.windows.2"中,在Windows用户的“home”文件夹(C:\Users\<yourusername>\)下,会有一个名为“.bash_history”的文件,没有文件扩展名。只有在退出bash后才会创建该文件。
以下是我的工作流程:
  1. 在退出bash之前输入“history >> history.txt”[ENTER]
  2. 退出bash提示符
  3. 按住Win+R打开运行命令框
  4. 输入shell:profile
  5. 打开“history.txt”以确认我的文本已添加
  6. 在新行上按[F5]输入时间戳
  7. 保存并关闭历史文本文件
  8. 删除“.bash_history”文件,以便下一个会话将创建新的历史记录
如果你真的想得到分数,我猜你可以制作一个批处理文件来完成所有这些操作,但这对我来说已经足够好了。希望能帮助到某些人。

-6

Git会显示影响索引的提交中的更改,例如git rm。它不会存储您执行的所有git命令的日志。

然而,大量的git命令以某种方式影响索引,例如创建一个新分支。这些更改将显示在提交历史记录中,您可以使用git log查看。

但是,有一些破坏性的更改是git无法跟踪的,例如git reset

因此,回答您的问题,git不会在存储库中存储您执行的git命令的绝对历史记录。但是,通常可以通过提交历史记录插值出您执行的命令。


3
如下面的一个回答所正确提到的,实际上它可以。"history" 会显示自安装以来执行过的命令列表。 - Umesh .A Bhat
2
Shell 会存储历史记录,但是 Git 不会,对吧? - Alex
3
git history 可以用于查看在一个特定的克隆中执行了哪些命令,这很有用。 - Kyle Strand
2
这个回答哪里出了问题,导致它被那么多人踩了? - cp.engr
6
git reflog 是你想要的。请参见下面的答案。 - Chéyo
4
@cp.engr:OP询问的是git命令的历史,而不是git提交记录。这个答案建议从git提交记录中推断命令,这是非常艰苦的工作,并且并不总是可行的。git reflog实际上显示了命令本身。另外顺便说一句,shell只是一个稍微更直接的推断git命令的方式,但是一个git库可能被多个shell操作。最好向git询问使用了哪些命令。 - combinatorist

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