【问题标题】:Git: See my last commitGit:查看我的最后一次提交
【发布时间】:2011-01-14 22:48:12
【问题描述】:

我只想查看上次提交中提交的文件,就像我在git commit 时看到的列表一样。不幸在寻找

git "last commit" log

在 Google 中让我无处可去。还有

git diff HEAD^..HEAD

当然,这不是我所需要的,因为它也会引发变化。

【问题讨论】:

  • 谢谢,其实我只需要git diff HEAD^..HEAD
  • @Ameen 使用git show -1 打字更快

标签: git


【解决方案1】:

并且没有 git:tail -n1 .git/logs/HEAD | cut -d' ' -f1,8-

【讨论】:

    【解决方案2】:

    查看以前的提交 SHA

    git log -n 2 --pretty=format:"%h" | tail -n 1
    

    【讨论】:

      【解决方案3】:

      如果您只想查看上次提交中的文件名

       git diff HEAD@{1} --name-only
      

      如果您还想查看内容更改,请删除 --name-only

      如果您想将当前状态与旧提交进行比较,请增加 {n}

      【讨论】:

        【解决方案4】:

        在 git 中单独获取我的最后一条提交消息

        git log --format=%B -n 1 $(git log -1 --pretty=format:"%h") | cat -

        【讨论】:

          【解决方案5】:

          上面已经回答了这个问题,它通过 git log / 其他命令说明了上次提交中的文件名。如果有人想查看上次提交的所有更改(行差异),您可以使用此命令 -

          git show
          

          这会自动显示上次提交中的行差异。

          【讨论】:

            【解决方案6】:

            你可以跑

             git show --source
            

            它显示了作者、日期、提交的消息以及最新提交中所有更改文件的 diff --git

            【讨论】:

              【解决方案7】:

              到目前为止,最简单的命令是:

              git show --name-only
              

              因为它列出了只是上次提交中的文件,并没有给你全部内容

              输出示例:

              commit  fkh889hiuhb069e44254b4925d2b580a602
              Author: Kylo Ren <Kylo@darkside.empire.gov>
              Date:   Sat May 4 16:50:32 2168 -0700
              
              Changed shield frequencies to prevent Millennium Falcon landing
              
               www/controllers/landing_ba_controller.js             
               www/controllers/landing_b_controller.js            
               www/controllers/landing_bp_controller.js          
               www/controllers/landing_h_controller.js          
               www/controllers/landing_w_controller.js  
               www/htdocs/robots.txt                        
               www/htdocs/templates/shields_FAQ.html       
              

              【讨论】:

              • 考虑--name-status 而不是--name-only
              • 问题就在这里..帝国正在使用 php 作为防御网格!
              • 我在stackoverflow上看到的最好的例子! “那些不是你要找的提交。”
              • 对于后来的人,如果您查看 2020-01-14 所做的编辑,其他 cmets 会更有意义。好吧,除了第一个,这已经很有意义了。
              • 如果您仍然想要状态但也想要缩短的形式,请考虑git show --oneline --name-status
              【解决方案8】:

              在您进行多次提交或克隆/拉取存储库后,您可能希望查看已提交的内容。只需检查这些简单的解决方案即可查看您的提交历史记录(从上次/最近提交到第一次)。

              对于最后一次提交,只需触发此命令:git log -1。更多有趣的事情见下文 -

              1. 查看提交 ID(SHA-1 校验和)、作者姓名 、日期和时间以及提交消息 -

                git log
                
              2. 查看更多统计信息,例如在该提交期间更改的所有文件的名称以及插入/删除的数量。这在查看代码时非常方便 -

                git log --stat
                
              3. 以一些漂亮的格式查看提交历史 :)(后面是一些预构建选项)-

                • 如果你有太多的提交需要审查,这个命令会在一行中显示它们:

                  git log --pretty=oneline
                  
                • 要查看提交的简短、中等、完整甚至更多详细信息,请分别使用以下内容 -

                  git log --pretty=short
                  git log --pretty=medium
                  git log --pretty=full
                  git log --pretty=fuller
                  
              4. 您甚至可以使用 format 选项使用自己的输出格式 -

                git log --pretty=format:"%an, %ae - %s"
                

                其中 %an - 作者姓名,%ae - 作者电子邮件,%s - 提交主题等。

              这可以帮助您了解提交历史。更多信息,请点击here

              【讨论】:

                【解决方案9】:

                如果您正在谈论找到最新和最伟大的提交在您对一些较早的提交执行 git checkout 之后在执行结帐之前忘记写下 HEAD 的哈希) 上面的大部分内容都不会让你回到你开始的地方。 git log -[some #] 仅显示 HEAD 的当前位置 的日志,这不一定是最后一次提交(项目状态)。 Checkout 将断开 HEAD 并将其指向您签出的任何内容。

                您可以查看整个 git reflog,直到到达引用原始克隆的条目。顺便说一句,如果在您克隆项目和执行结帐之间进行了任何提交,这也将不起作用。否则,您可以希望本地计算机上的所有提交都在服务器上,然后重新克隆整个项目。

                希望这会有所帮助。

                【讨论】:

                • 谢谢,这是一个很好的观点,但最初的问题要简单得多,并且已经回答了很多次。
                【解决方案10】:

                另一种仅列出文件的方法是使用:
                git diff-tree --no-commit-id --name-only -r HEAD^..HEAD
                或者你可以使用任意两个提交 ID

                【讨论】:

                • 这对log的好处?
                • 基本上是另一种列出文件的方式。我通常将它与 rsync 结合起来进行部署
                【解决方案11】:

                查看上次提交更改

                git show HEAD
                

                或查看倒数第二个提交更改

                git show HEAD~1
                

                更进一步,只需将上面的“1”替换为所需的提交序列号。

                【讨论】:

                  【解决方案12】:

                  使用git show:

                  git show --summary
                  

                  这将显示创建或删除文件的名称,但不显示更改文件的名称。 git show 命令支持多种输出格式,可显示有关提交的各种类型的信息。

                  【讨论】:

                  • @jamessan git show --stat 已关闭,但文件旁边没有显示“修改”或“添加”字样的视图吗?
                  • 如果您只需要文件名(甚至少于--stat),您可能还需要查看--name-status--name-only 开关。
                  • @MikeSep,这实际上是我需要的。如果您将其作为答案,我会将其标记为最佳答案,因为对我来说是。我正在使用git log --name-status HEAD^..HEAD
                  • 这是迄今为止提供的最简单的解决方案。
                  • 如果你只是调用git show,你会看到你上次提交的差异
                  【解决方案13】:

                  查看最后一次提交

                  git log -1
                  

                  查看最后 2 个提交

                  git log -2
                  

                  等等……

                  【讨论】:

                  • 但是问题说"...想要查看上次提交中提交的文件"
                  【解决方案14】:

                  git diff --stat HEAD

                  这显示了与您上次提交相同的 diffstat。

                  【讨论】:

                    【解决方案15】:

                    通过 cmets 确定,OP 似乎正在寻找

                    $ git log --name-status HEAD^..HEAD
                    

                    这也非常接近您从 svn statussvn log -v 获得的输出,许多从 subversion 转向 git 的人都很熟悉。

                    --name-status 是这里的关键;正如其他人在这个问题中所指出的,您可以使用git log -1git showgit diff 来获得相同类型的输出。就个人而言,在查看个别修订时,我倾向于使用git show &lt;rev&gt;

                    【讨论】:

                    • 我承认,cmets 不是让我的问题更清楚的最佳方式 :) 谢谢 MikeSep
                    • 我认为这是最后一次提交,不是吗?所以,对于我最后一次我会做git log --stat --author nroose -n 1
                    • 并且可以用 git show --name-status --oneline 缩写和缩短
                    • 这太明显了!我应该猜到它是如此简单,因为这是一直在发生的那种查询。
                    • 在使用强制推送的情况下,此命令将显示最后一个补丁而不是最新(按时间)提交......在某些用例中可能会很棘手
                    【解决方案16】:
                    git log -1 --name-status
                    

                    为我工作。

                    【讨论】:

                      【解决方案17】:
                      git log -1 --stat
                      

                      可以工作

                      【讨论】:

                      • 其他解决方案似乎除了最后一次提交外还输出未提交的更改,这不是我想要的。这似乎只输出提交更改。
                      【解决方案18】:
                      $ git diff --name-only HEAD^..HEAD

                      $ git log --name-only HEAD^..HEAD

                      【讨论】:

                      • 这就是我非常需要的。有什么说它是否被修改、添加或删除的东西怎么样?也许用字母,svn 风格?
                      • 现在知道了。 git log --name-status HEAD^..HEAD
                      • 代替git log ... HEAD^..HEAD,使用git log ... -1 HEAD不是更简单,还是git show ... HEAD更好?
                      • 在浏览了几篇 Stackoverflow 帖子后,这就是我需要的答案。我只想要文件,没有别的。没有提交摘要,只有最新提交的文件。谢谢!
                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2011-01-21
                      • 2015-01-16
                      • 2012-08-31
                      • 2011-02-20
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多