我对函数进行了几处更改,并使用git add -p
登台了其中的一个。
在提交它之前,我想检查一下此更改是否确实应做的事情。
因此,我想完全按照分阶段区域的方式打印代码,以便我可以复制此功能并在单独的文件中对其进行测试。
在gitk
中将有一个有用的单选按钮,我可以选择新版本而不是 Diff 。
但是,我不能在这里使用gitk,因为我是通过ssh连接到没有图形用户界面的计算机的。
如果更改已经提交,我可以使用git show HEAD:myfile
(尽管这会打印整个文件,这远远超出了我当前感兴趣的范围),但是我不知道如何指定暂存区域HEAD。
我对两者都感兴趣:
git show
中指定暂存区域,以便可以打印整个文件?我找到了this answer,但是-e
中没有记录git diff --help
,当尝试使用它时,出现错误:无效选项:-e 。 / p>
我当然可以提交更改,在git show HEAD:myfile
的输出中搜索它们,然后在必要时使用git commit --amend
更改提交,但是我觉得必须有一种更简单的方法。
答案 0 :(得分:1)
被称为临时区域的事物也被称为 index 。因此,文件的暂存副本也是文件的索引副本。要引用特定文件的索引副本,请使用前导语法::digit:filename
,例如:0:myfile
:
git show :0:myfile
索引在暂存插槽零中保留文件的1个副本,在暂存插槽1、2和3中保留(最多)文件的三个副本。后者仅在合并期间发生,同时解决了冲突。由于您不在冲突合并的中间,因此文件仅存在于阶段零。您可以省略数字和第二个冒号,以表示“暂存槽为零”:
git show :myfile
(与git show HEAD:myfile
比较,从HEAD
提交中提取文件的副本,或者git show hash:myfile
从给定的提交哈希中提取文件的副本。)这些文件以内部的,Git格式的文件副本工作,采用已提交文件的特殊Git-only /只读格式(已复制到索引中的文件已经采用这种格式)。
要针对索引对HEAD
进行 diff 提交,请使用:
git diff --cached
请注意,这会将HEAD
中的每个文件与索引中的每个文件进行比较。当然,索引中的大多数文件已经与HEAD
中的副本匹配。特别是,如果您这样做:
git checkout master
<edit some file>
git add [options] just-one-file
然后除索引/暂存区中的just-one-file
文件以外的所有文件与HEAD
中的对应文件匹配,因此diff无论如何将只显示一个文件。 / p>
如果索引中有多个文件与它们的HEAD
不同,则可以使用路径名进一步限制git diff
的输出:
git diff --cached -- myfile
例如。 (这仍将显示已删除的所有行。)
(常见的误解是,暂存区域仅保存 new 个文件。情况并非如此-实际上,它实际上保存了随时准备提交的每个文件时间-但是由于许多教程中描述了暂存区域的方式,并且由于git diff
对于未更改的文件没有显示任何内容,因此它可以似乎< / em>首先。要查看暂存区域中所有文件的列表以及有关文件的信息,请使用git ls-files --stage
。请注意,此列表可能很长!)
答案 1 :(得分:0)
我认为您要寻找的选项是--diff-filter
。
使用--diff-filter=M
,您可以过滤差异以仅显示 m 个经过修改的文件。
来自man git-diff
:
--diff-filter=[ACDMRTUXB*]
仅选择符合以下条件的文件
A
已添加C
已复制D
已删除M
修改R
重命名T
的类型(模式)已更改U
未合并X
未知B
的配对已损坏*
全部或全部可以使用过滤器字符的任何组合。
将*(全或全)添加到组合中时,所有路径均为 如果有任何文件符合 比较如果没有符合其他条件的文件,则没有任何内容 被选中。
有关git-diff的完整文档,请参见here。