【问题标题】:History or log of commands executed in Git在 Git 中执行的命令的历史或日志
【发布时间】:2011-09-15 18:08:06
【问题描述】:

有没有一种方法可以跟踪我在 Windows 下的 Git 中使用的命令?我想查看我在存储库中应用的所有命令。

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

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

【问题讨论】:

  • 这有点小题大做,但如果你查看.git/logs,你会看到每个分支指向的提交的历史记录。
  • @Nayuki 由于pushing 不会改变本地分支的状态,reflog 显然不会存储pushes,所以查看.git/logs/refs/remotes/*/* 是唯一的方法查看您的push 历史记录。

标签: git


【解决方案1】:

您的命令日志可能在您的 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

【讨论】:

    【解决方案2】:

    您可以通过git-reflog (example here) 查看历史记录:

    git reflog
    

    【讨论】:

    • @PauAI 而git reflog 将显示您的 HEAD 所遵循的所有位置,它实际上不会显示所有 git 命令。不移动头部的 Git 命令(例如 git branch -D my_precious_branch)不会显示在那里。
    • @Yonatan,你不能用git reflog --all 得到它吗?
    • @combinatorist 尝试添加一个遥控器(例如 OP 给出的):git remote add foo bar。它不会出现在git reflog --all 中,因为它不会修改 HEAD 指针。
    • git reflog 不向我显示像 git status aso. 这样的命令,无论有无 --all 参数。
    • @questionto42 这是预期的。 git status 只读取数据 - 它不会更改任何内容,因此不会造成任何伤害或问题。 Git 本身不会记录所有执行的命令。 reflog 文档说:“记录本地存储库中分支和其他引用的提示何时更新”。记录所有内容的 hackish 方法是将 git 二进制文件替换为记录所有参数的 shellscript(或其他),然后调用原始二进制文件转发相同的参数。
    【解决方案3】:

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

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

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

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

    【讨论】:

    • 实际上,正如下面正确提到的答案,确实如此。 “历史”显示执行的命令列表(自安装以来)。
    • shell 存储历史,但 git 没有,对吧?
    • @UmeshABhat git history 对于例如查看在特定克隆中执行了哪些命令
    • git reflog 是你想要的。请参阅下面的答案。
    • @cp.engr:OP 要求提供 git 命令的历史记录,而不是 git 提交。这个答案建议从 git 提交中推断命令,这是非常艰苦的工作,并不总是可能的。 git reflog 实际上显示了命令本身。另外,顺便说一句,shell 只是一种更直接的方式来推断 git 命令,但是一个 git repo 可以被多个 shell 访问。最好问问git用了什么命令。
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      如果您使用的是 CentOS 或其他 Linux 版本,那么只需在提示符处输入 Ctrl+R 并输入 git

      如果你一直点击Ctrl+R,这将在你的历史记录中反向搜索以git开头的命令

      【讨论】:

        【解决方案6】:

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

        或者,如果你使用 cygwin,你可以用 ^R 做同样的事情。

        【讨论】:

        • 在正常的 windows 会话中,您可以使用 F7 键打开一个小窗口,其中列出了在该会话中输入的所有命令
        【解决方案7】:

        我发现在 Windows 用户下我的“home”文件夹中的 git bash "2.24.0.windows.2" 版本中,将有一个名为 ".bash-history" 的文件,其中没有文件扩展名文件夹。它仅在您退出 bash 后创建。

        这是我的工作流程:

        1. 在退出 bash 之前输入“history >> history.txt”[ENTER]
        2. 退出 bash 提示符
        3. 按住 Win+R 打开运行命令框
        4. 进入外壳:配置文件
        5. 打开“history.txt”以确认我的文本已添加
        6. 在新行上按 [F5] 输入时间戳
        7. 保存并关闭历史文本文件
        8. 删除“.bash-history”文件,以便下一个会话创建新的历史记录

        如果你真的想要积分,我想你可以制作一个批处理文件来完成所有这些,但这对我来说已经足够了。希望它可以帮助某人。

        【讨论】:

          猜你喜欢
          • 2011-08-10
          • 1970-01-01
          • 2020-02-13
          • 2014-09-02
          • 2023-04-01
          • 1970-01-01
          • 1970-01-01
          • 2021-02-03
          • 2014-11-01
          相关资源
          最近更新 更多