在提交git之前,如何查看文件中的更改?

时间:2010-12-16 01:04:02

标签: git

我注意到在处理一两张票时,如果我离开,我不确定我的工作是什么,改变了什么,等等。

有没有办法在git add然后git commit之前查看给定文件所做的更改?

11 个答案:

答案 0 :(得分:472)

您正在寻找git diff。根据您的具体情况,有三种有用的方法可供使用:

# show differences between index and working tree
# that is, changes you haven't staged to commit
git diff [filename]
# show differences between current commit and index
# that is, what you're about to commit
# --staged does exactly the same thing, use what you like
git diff --cached [filename]
# show differences between current commit and working tree
git diff HEAD [filename]

它将在目录上递归工作,如果没有给出路径,则显示所有更改。

答案 1 :(得分:31)

使用git-diff

git diff yourfile

答案 2 :(得分:8)

对我来说,git add -p是最有用的方式(并且我认为是git开发人员想要的?)来审查所有未分级的更改(它显示每个文件的差异),选择一组应该发生的变化使用提交,然后当您已经暂存所有这些,然后使用git commit,并重复下一次提交。然后,即使它们发生在各种文件中,您也可以使每个提交成为有用或有意义的更改集。我还建议为每个故障单或类似活动创建一个新分支,并使用checkout在它们之间切换(如果你不想在切换之前提交,可能使用git stash),不过如果你这样做许多快速变化这可能是一种痛苦。不要忘记经常合并。

答案 3 :(得分:7)

git diff filename

答案 4 :(得分:5)

git diff

  

显示工作树与索引或树之间的更改,索引与树之间的更改,两棵树之间的更改或磁盘上两个文件之间的更改。

答案 5 :(得分:4)

请记住,您提交的是更改,而不是文件。

出于这个原因,我很少使用git add -p(或magit等价物)来添加我的更改。

答案 6 :(得分:2)

git diff <path>/filename

路径可以是完整的系统路径,直到文件或
如果您在项目中,则还粘贴修改后的文件路径 对于具有路径使用的已修改文件:git status

答案 7 :(得分:2)

好吧,我的情况是你不想关心文件列表。只是展示它们。

当您使用文件列表运行git add时:

$ git diff --cached $(git diff --cached --name-only)

同样可以用于没有添加文件但没有--cached选项。

$ git diff $(git diff --name-only)

“缓存”选项的Git命令别名:

$ git config --global alias.diff-cached '!git diff --cached $(git diff --cached --name-only)'

答案 8 :(得分:0)

您还可以使用git友好的文本编辑器。它们显示已修改的线条上的颜色,添加线条的另一种颜色,删除线条的另一种颜色等。

执行此操作的优秀文本编辑器是GitHub's Atom 1.0

答案 9 :(得分:0)

转到您各自的git repo,然后运行以下命令:

git diff文件名

它将打开带有标记更改的文件,然后按回车/确认键向下滚动文件。

P.S。文件名应包含文件的完整路径,否则,您可以通过进入文件的相应目录/文件夹来运行而无需完整文件路径

答案 10 :(得分:0)

对于某些路径,其他答案将返回格式为fatal: ambiguous argument的错误。

在这些情况下,diff需要分隔符来区分文件名参数和提交字符串。例如,要回答您需要执行的问题:

$ git diff --cached -- <path-to-file>

这将显示修改后的文件和最后一次提交之间的更改。

另一方面:

git diff --cached HEAD~3 <path-to-file>

将显示的本地版本和三个以前提交的版本之间的更改。