在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

通过这种方式,我可以快速查看自上次签入该文件以来我在该文件中做了什么。

556644 次浏览

如果你想看看你还没有git added:

git diff myfile.txt

或者如果您想查看已经添加的更改

git diff --cached myfile.txt

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

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

就我个人而言,我的每一次提交都是从git-gui中完成的。在其中,我可以使用单独的块/行进行多个原子提交,如果这样做有意义的话。

Gut Gui可以在一个格式良好的彩色界面中查看差异,是相当轻的。看来你也该结账了。

git diff HEAD file

将显示上次提交后添加到工作树中的更改。将显示所有的更改(分期或不分期)。

检查局部差异:

git diff myfile.txt

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

git difftool myfile.txt

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

注意:您也可以使用.(而不是filename)来查看当前的目录更改。

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


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

git show master:path/my_file

除了使用专用的提交GUI,我发现最好的方法是使用git difftool -d -这将以目录比较模式打开你的diff工具,比较HEAD和当前脏文件夹。

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

git diff master myfile.txt

这种技术的优点是你也可以比较倒数第二个提交:

git diff master^ myfile.txt

再上一个:

git diff master^^ myfile.txt

此外,如果你不在主分支上,你可以用'~'代替插入符号'^',用'you分支名'代替'master'。

在macOS下,进入git根目录,输入“git diff *

git difftool -d HEAD filename.txt

这显示了在终端中使用VI狭缝窗口的比较。

diff可以用git diff完成(如果你想看到所有修改文件的diff,后面跟着文件名或什么都没有)。 但是如果你已经做了git add *这样的事情,你必须先用git restore --staged .撤销