在提交到git之前,我如何查看文件中发生了什么变化?

我注意到,在处理一两张票时,如果我走开,我不确定我在做什么,什么改变了,等等。

是否有一种方法可以在git添加和提交之前查看给定文件所做的更改?

302463 次浏览

使用git-diff:

git diff -- yourfile

git diff filename

< a href = " http://git-scm.com/docs/git-diff " rel = " noreferrer > git diff < / >

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

你要找的是

< a href = " http://git-scm.com/docs/git-diff " rel = " noreferrer > git diff --staged < / >

根据你的具体情况,有三种有用的方法来使用git diff:

  1. 显示索引和工作树之间的差异;也就是说,你还没有提交的更改:
git diff [filename]
  1. 显示当前提交和索引之间的差异;也就是说,你要提交的东西(--staged做的事情完全相同,使用你喜欢的):
git diff --cached [filename]
  1. 显示当前提交和工作树之间的差异:
git diff HEAD [filename]

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

记住,你提交的是变化,而不是文件。

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

对我来说,git add -p是最有用的方法(我认为是git开发人员的意图吗?)来检查所有未分期的更改(它显示了每个文件的差异),选择一组应该与提交一起进行的更改,然后当你已经分期所有这些更改时,然后使用git commit,并重复下一次提交。然后,您可以使每个提交都是一组有用或有意义的更改,即使它们发生在不同的文件中。我还建议为每一张票或类似的活动创建一个新的分支,并使用checkout在它们之间切换(如果你不想在切换之前提交,可能使用git stash),尽管如果你正在做很多快速更改,这可能是一个痛苦。不要忘记经常合并。

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

一个好的文本编辑器是GitHub的Atom 1.0

git diff <path>/filename

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

的修改文件

好吧,我的情况下,当你不想关心文件列表。让他们都看看。

当你已经用你的文件列表运行git add:

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

git的最新版本中,你也可以使用--staged,它是--cached的同义词。

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

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

“cached”选项的Git命令别名:

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

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

Git diff文件名

它将打开文件与更改标记,按返回/回车键向下滚动文件。

P.S. filename应包括文件的完整路径,否则,您可以通过进入文件的相应目录/文件夹而不使用完整文件路径运行

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

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

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

这将显示修改后的文件与上次提交之间的更改。

另一方面:

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

将显示本地版本与三次提交前版本之间的更改。

如果你不确定你所做的更改的文件,并且在提交到你的本地分支之前想知道这些更改,使用git add -p,它可以帮助你在接受添加到你的本地分支之前验证这些更改。 使用这个查询

[y,n,q,a,d,/,j, j, g,e,?]? 将为您提供多个选项,如y为Stage the change, n为not Stage the change等。

< p >其他选项: Q -退出;不要把这个大块头也不要把剩下的都放上去 A -阶段这个大块和所有后来的大块在文件中 D -不舞台这个大块或任何后来的大块在文件 G -选择一个帅哥去 / -搜索匹配给定正则表达式的块 这一大块待定,看下一大块待定 这个帅哥先别想,看下一个帅哥 K -留下这个未定的大块,见前一个未定的大块 K -离开这块未定,见前块 S -将当前块分割成更小的块 手动编辑当前块 ? - print help

希望能有所帮助!!git快乐……