2012-04-06 272 views
237

这经常发生在我身上:如何查看git的文件差异比较之前提交

我工作的一对夫妇相关的变化在同一时间在一两天的过程中,当它的时间来提交,我最终忘记了在特定文件中更改的内容。 (这只是一个个人的git回购,所以我可以在提交中有多个更新。)

有没有什么方法可以预览我的本地文件之间的变化,即将要签入的本地文件,和该文件的最后一次提交?

喜欢的东西:

git diff --changed /myfile.txt 

而且它会打印出喜欢的东西:

line 23 
    (last commit): var = 2+2 
    (current):  var = myfunction() + 2 

line 149 
    (last commit): return var 
    (current):  return var/7 

这样一来,我可以很快看到了我在那个文件已经完成,因为这是最后的检查。

回答

418

如果你想看看你有没有git add版尚未:

git diff myfile.txt 

,或者如果你想看到already- add ED改变

git diff --cached myfile.txt 
+7

请注意,双破折号只需要修订和文件名之间可能存在混淆(在这种情况下,git会告诉你)。 – 2012-04-06 10:07:52

+0

谢谢!是git diff myfile.txt。还要感谢双重短划线笔尖。 – 2012-04-07 02:01:06

+3

查看'git add -p'。审查每一个变化,有选择地批准舞台变化,如果你改变主意,随时中止,甚至内联编辑块。没有它,我永远不会'git add'。 – 2017-05-16 04:22:30

11

你尝试git commit-v(或--verbose)选项?它在消息编辑器中添加提交的差异。

+1

因为git 1.7.2 – OlivierBlanvillain 2014-11-20 08:59:55

+0

很好的答案。这可以在提交编辑器中提供信息,使我更容易提交。有没有什么办法可以关闭'commit not staged for commit:'的信息区域,它可以让commit编辑器更干净。 – 2016-10-16 06:55:22

12

我认为这是保证GUI的完美用例。 - 虽然我完全理解,它也可以在命令行中实现得足够好。

就我个人而言,我的每一个承诺,我都是从git-gui做的。在这种情况下,如果有意义的话,我可以使用单独的hunk/lines进行多个原子提交。

Gut Gui允许在格式良好的彩色界面中查看差异,相当轻松。看起来这是你应该结帐的东西。

+0

我同意 - 它还允许您在查看差异的同时编辑提交消息。 – 2012-04-06 10:47:26

+0

很高兴知道,但我想坚持CLI。我已经使用了一些包,但我已经转移到严格的终端/ VIM我的工作流程。不过谢谢。 – 2012-04-07 01:20:31

+0

是的,如果你坚持GUI,有很多很酷的功能,比如'git bisect',这些功能是不可访问的。 – NoBugs 2014-03-15 04:22:36

44
git diff HEAD file 

将显示您从上次提交中添加到工作树中的更改。将显示所有的变化(分阶段或不分阶段)。

+1

您的解决方案有效。但我有点困惑。 HEAD指向最新的提交编号。所以,当我们添加git时,工作目录的索引被更新,而不是HEAD。那么它是如何显示其差异的呢? – Mav55 2018-01-12 16:11:48

10

要检查的地方差异:

git diff myfile.txt 

,或者你可以使用一个diff工具(如果你想恢复一些变化):

git difftool myfile.txt 

为了有效地使用git difftool更多,安装并使用您喜欢的GUI工具,如Meld,DiffMerge或OpenDiff。

注意:您还可以使用.(而不是文件名)查看当前目录更改。

为了检查每行的更改,请使用:git blame这将显示在哪个提交中提交了哪条线。


查看实际的文件之前,提交(其中master是您的分支),运行:

git show master:path/my_file 
1

我发现最好的方法,除了使用专门提交GUI的,就是用git difftool -d - 这将在目录比较模式下打开您的diff工具,将HEAD与当前的脏文件夹进行比较。

8

另一种技术考虑,如果你想将文件进行比较,以最后一次提交哪个更迂腐:

git diff master myfile.txt 

这种技术的好处是,你还可以比较倒数第二与承诺:

git diff master^ myfile.txt 

和一个之前:

git diff master^^ myfile.txt 

您也可以substi如果您不在主分支上,请为'^'字符指定'〜'并为'master'指定'您的分支名称'。

3

在MacOS,去到GIT根目录,并输入git diff *

+0

这不适用于win10 – lucaste 2018-02-14 21:01:09

0
git difftool -d HEAD filename.txt 

此示出了使用VI狭缝在终端窗口的比较。