查看更改前更改的未提交git文件的外观
假设我有一个文件查看更改前更改的未提交git文件的外观,git,Git,假设我有一个文件target.json,我在很多地方对它进行了更改。它是repo中已经存在的许多文件之一,自上次提交以来,我已经更改了这些文件。这些文件可以被暂存,也可以不暂存 要查看对文件所做的更改,我可以执行以下操作: git diff target.json 这主要显示文件上的增量。如果我想在进行当前本地更改之前查看文件的版本,该怎么办?也就是说,从最新的commit开始浏览文件diff添加了大量噪声,使得在更改之前很难看到文件。我也无法在责怪上找到一个标志来满足我的要求。我可以想出以下
target.json
,我在很多地方对它进行了更改。它是repo中已经存在的许多文件之一,自上次提交以来,我已经更改了这些文件。这些文件可以被暂存,也可以不暂存
要查看对文件所做的更改,我可以执行以下操作:
git diff target.json
这主要显示文件上的增量。如果我想在进行当前本地更改之前查看文件的版本,该怎么办?也就是说,从最新的commit
开始浏览文件diff
添加了大量噪声,使得在更改之前很难看到文件。我也无法在责怪
上找到一个标志来满足我的要求。我可以想出以下方法:
保存更改,查看stash
,然后target.json
保存pop
。我以前也这样做过stash
更改,提交
以前的签出
,查看提交
,删除最新的目标.json
。这看起来很难看提交
- 复制
,删除对文件所做的更改,查看文件,target.json
复制到mv
。这听起来也像我过去做过的事情target.json
有没有更优雅的方法?感觉我缺少了一些明显的内容
git show HEAD:target.json
将打印出包含在由HEAD
标识的提交中的文件target.json
的内容。类似地,git show hash:target.json
将显示指定的hash
中包含的文件target.json
的内容。有关拼写特定提交的完整方法列表,请参阅;其中大部分在这里工作
git show:target.json
将打印出索引(也称为暂存区)中包含的文件target.json
的内容;如果它与HEAD:target.json
和名为target.json
的工作树文件都不同,那么这非常有用
在冲突合并期间,索引/暂存区将容纳(最多)三份target.json
,您可以通过1:target.json
(合并基本版本)、2:target.json
(HEAD
或--ours
版本)和3:target.json
(--theres
版本)访问它们。这或多或少也是git mergetool
的工作原理:它将所有三个文件提取到临时文件中。(它使用git checkout index--all--temp
而不是git show
,因为这更适合它的脚本代码,但原理是一样的。)
注意:如果您在
.gittributes
或类似文件中定义了CRLF修改和/或污迹过滤器,git show
用于不应用这些内容。现代Git可以被告知使用它们(--textconv
)或不使用它们(--no textconv
),但通常默认情况下应该做明智的事情。Git show HEAD:target.json
将打印HEAD
标识的提交中包含的文件target.json
的内容。类似地,git show hash:target.json
将显示指定的hash
中包含的文件target.json
的内容。有关拼写特定提交的完整方法列表,请参阅;其中大部分在这里工作
git show:target.json
将打印出索引(也称为暂存区)中包含的文件target.json
的内容;如果它与HEAD:target.json
和名为target.json
的工作树文件都不同,那么这非常有用
在冲突合并期间,索引/暂存区将容纳(最多)三份target.json
,您可以通过1:target.json
(合并基本版本)、2:target.json
(HEAD
或--ours
版本)和3:target.json
(--theres
版本)访问它们。这或多或少也是git mergetool
的工作原理:它将所有三个文件提取到临时文件中。(它使用git checkout index--all--temp
而不是git show
,因为这更适合它的脚本代码,但原理是一样的。)
注意:如果您在
.gittributes
或类似文件中定义了CRLF修改和/或污迹过滤器,git show
用于不应用这些内容。现代Git可以被告知使用它们(--textconv
)或不使用它们(--no textconv
),但一般来说,默认情况下应该做明智的事情。大多数好的IDE(例如IntelliJ)都有Git插件,这些插件可以显示修改文件的前后。没错,我应该在我的IDE上做这件事。但是在终端上应该有一种简单的方法。这里可能有一种方法可以通过终端来实现这一点,但这不是我想在这里使用的工具。随便看看,你可能会找到你问题的答案。会的,谢谢你的帮助。漂亮的秘密帽子顺便说一句!大多数优秀的IDE(例如IntelliJ)都有Git插件,其中包括可以显示修改文件的前后。但是在终端上应该有一种简单的方法。这里可能有一种方法可以通过终端来实现这一点,但这不是我想在这里使用的工具。随便看看,你可能会找到你问题的答案。会的,谢谢你的帮助。漂亮的秘密帽子顺便说一句!美丽的!这正是我想要的。在发布之前,如果git show没有列出要显示的内容(git show
将尝试依次查找和显示这些内容),那么尝试使用的git show HEAD target.json
绝对不会想到使用:
这种特定语法会非常合理。不过,您可以从这里文档页面的概要部分看出。Beaut