【问题标题】:Finding diff between current and last version查找当前版本和上一个版本之间的差异
【发布时间】:2012-04-11 19:27:47
【问题描述】:

使用 Git,如何找到当前版本和上一个版本之间的差异?

git diff last version:HEAD

【问题讨论】:

  • 如果您使用 GitHub 作为存储库的云位置,这非常简单:导航到您的项目并单击显示您的项目的表格中的标题“commits”
  • 真正应该在问题中澄清“当前和最新版本”的含义。

标签: git


【解决方案1】:

假设“当前版本”是工作目录(未提交的修改),“最后一个版本”是HEAD(当前分支的最后提交修改),只需这样做

git diff HEAD

以下内容归功于用户 Cerran

如果你在提交时总是使用-a 跳过暂存区,那么你可以简单地使用git diff

总结

  1. git diff 显示未分阶段的更改。
  2. git diff --cached 显示阶段性更改。
  3. git diff HEAD 显示所有更改(分阶段和未分阶段)。

来源:git-diff(1) 手册页 - Cerran

【讨论】:

  • 如果你在提交时总是用-a跳过暂存区,那么你可以简单地使用git diffgit diff 显示 unstaged 更改。 git diff --cached 显示分阶段的变化。 git diff HEAD 显示所有 更改(分阶段和未分阶段)。来源:git-diff(1) Manual Page
  • git中“当前未暂存版本”的名称是什么?真的有名字吗?
【解决方案2】:

我不太明白“最新版本”的含义。

由于可以使用 HEAD^ 访问上一个提交,我认为您正在寻找类似的内容:

git diff HEAD^ HEAD

这也可以申请 :commithash

git diff $commithash^ $commithash

从 Git 1.8.5 开始,@HEAD 的别名,因此您可以使用:

git diff @~..@

以下也将起作用:

git show

如果您想知道 head 和任何可以使用的提交之间的差异:

git diff commit_id HEAD

这将启动您的视觉差异工具(如果已配置):

git difftool HEAD^ HEAD

由于与 HEAD 的比较是默认设置,因此您可以省略它(正如 Orient 所指出的那样):

git diff @^
git diff HEAD^
git diff commit_id

警告

  • @ScottF 和@Panzercrisis 在 cmets 中解释说,在 Windows 上必须使用 ~ 字符而不是 ^

【讨论】:

  • 我想要提交版本和之前的版本...git diff head head-1
  • 从 Git 1.8.5 开始,@HEAD 的别名。而且由于~^ 在只返回一个提交时是相同的,我发现git diff @~..@ 更容易输入。
  • @Andrew git show 更容易,因为@~..@ 是默认显示的内容。
  • git show 的问题在于,如果HEAD 是一个合并提交,您将不会得到您期望的结果,因为合并提交本身可能没有任何更改。 git diff HEAD^ HEAD 将显示版本之间的实际变化
  • 备注:对于 Windows 命令提示符,^ 是转义字符。可以输入^^ 来表示^
【解决方案3】:

你也可以这样做:

与上一次提交比较

git diff --name-status HEAD~1..HEAD

比较当前和之前的两次提交

git diff --name-status HEAD~2..HEAD

【讨论】:

    【解决方案4】:

    如果您已添加但尚未提交,请使用 cached 标志:

    git diff --cached --color
    

    【讨论】:

    • 这正是我发现这个问题时所寻找的。谢谢!
    【解决方案5】:

    最后一次提交和最后一次提交之间的差异(加上当前状态,如果有的话):

    git diff HEAD~
    

    甚至(更容易输入)

    git diff @~
    

    其中@ 是当前分支的HEAD 的同义词,~ 表示“给我提到的修订版的父级”。

    【讨论】:

    • 我很喜欢git diff HEAD^(而不是等价的HEAD~形式)。对于像我这样的“老 git”来说,记住它要容易一些 ;-)
    • 胡萝卜在某些终端中是个问题。很高兴有这个选项
    • 可以通过解释~@ 的含义来改进答案。
    • 如果我们只想检查上次提交中提交的内容,请不要使用它(因为脏更改会影响差异)。真正diff HEAD^ HEAD 的较短语法应该是git diff @^!。对于r1^!,请参阅git-scm.com/docs/gitrevisions
    • @JohnnyWong 谢谢你的澄清。我提到“当前状态”是为了不让读者感到困惑。
    【解决方案6】:

    正如amalloycomment 中指出的那样,如果“当前和最后一个版本”是指最后一次提交和之前的提交,你可以简单地使用

    git show
    

    【讨论】:

    • 使用git show HEAD~1 显示最后一个提交,使用git show HEAD~2 等显示较旧的提交。通过git show HEAD~2 my_file 仅显示一个文件。
    【解决方案7】:

    首先,使用“git log”列出存储库的日志。

    现在,选择与这两个提交相关的两个提交 ID。您想查看差异(示例 - 最多的提交和一些较旧的提交(根据您对当前版本和一些旧版本的期望))。

    接下来,使用:

    git diff <commit_id1> <commit_id2>
    

    git difftool <commit_id1> <commit_id2>
    

    【讨论】:

      【解决方案8】:

      快速简单,假设你是大师:

          git diff (checkout_id):file.txt file.txt
      

      例子:

          git diff asdfioei91819280din198:file.txt file.txt
      

      【讨论】:

      • 请注意,在 (checkout_id): 之后,您需要从 repo 的根目录到文件名的相对路径。对我来说,我从文件所在的目录尝试了上述操作,但失败了,直到我将其更改为 git diff 3d44feb544150cf35b2a99d5917e294e10596f8e:./file.txt file.txt 此外,OP 的初衷尚不清楚,但如果您想要“当前版本和上一个版本之间的差异”的文件。我最初尝试过git diff HEAD~1 -- file.txt,但没有成功,因为对该文件的最后一次更改是在 10 次提交之前。
      【解决方案9】:

      我将Bitbucket 与安装了Eclipse EGit 插件的Eclipse IDE 一起使用。

      我比较文件历史的任何版本(如SVN)。

      菜单项目资源管理器 → 文件 → 右键单击​​ → 团队在历史中显示

      这将带来该文件所有更改的历史记录。 现在Ctrl点击并选择任意两个版本→“相互比较”

      【讨论】:

        【解决方案10】:

        这也适用于标签(如果您需要查看所有更改,请删除下面的“uniq”和其他部分):

         git diff v1.58 HEAD 
        

        以下内容相同,这可能对 continuous integration (CI) 用于单体存储库中的微服务有用:

        git diff v1.58 HEAD  --name-only | sort -u | awk 'BEGIN {FS="/"} {print $1}' | uniq
        <Folder Name> 
        

        (信用 - https://dzone.com/articles/build-test-and-deploy-apps-independently-from-a-mo

        【讨论】:

          【解决方案11】:

          如果 HEAD 指向顶部提交,那么您可以执行以下操作:

          commit1 -> HEAD
          commit2 -> HEAD~1
          commit3 -> HEAD~2
          

          第一次和第二次提交的区别:

          git diff HEAD~1 HEAD
          

          第一次和第三次提交的区别:

          git diff HEAD~2 HEAD
          

          第二次和第三次提交的区别:

          git diff HEAD~2 HEAD~1
          

          等等……

          【讨论】:

            【解决方案12】:

            在提交中显示个人更改,指向头部。

            git show Head~0
            

            在提交中显示累积的更改,指向头部。

            git diff Head~0
            

            其中 0 是所需的提交次数。

            【讨论】:

              【解决方案13】:

              如果最新版本表示最后一个标签,当前版本表示HEAD(当前状态),它只是与最后一个标签的差异:

              寻找tags

              $ git tag --list
              ...
              v20.11.23.4
              v20.11.25.1
              v20.11.25.2
              v20.11.25.351
              

              最后一个标签是:

              $ git tag --list | tail -n 1
              v20.11.25.351
              

              把它放在一起:

              tag=$(git tag --list | tail -n 1)
              git diff $tag
              

              【讨论】:

                【解决方案14】:

                如果您想要最后一次n 提交的更改,您可以使用以下内容:

                git diff HEAD~n

                因此,对于当前提交的最后 5 次提交(包括当前提交的计数),它将是:

                git diff HEAD~5

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-05-24
                  • 1970-01-01
                  • 2015-12-13
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多