这种情况经常发生在我身上:
在一两天的时间里,我同时进行了几个相关的更改,当该提交时,我最终忘记了特定文件中发生了什么更改。(这只是一个个人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
通过这种方式,我可以很快看到自上次签入该文件以来我在该文件中做了什么。
如果您想查看尚未git add
编辑的内容:
git diff myfile.txt
或者如果你想看到已经添加的更改
git diff --cached myfile.txt
git diff HEAD file
将显示上次提交后添加到工作树中的更改。将显示所有更改(已暂存或未暂存)。
检查局部差异:
git diff myfile.txt
或者你可以使用diff工具(以防你想恢复一些更改):
git difftool myfile.txt
要更有效地使用git difftool
,请安装并使用您喜爱的GUI工具,如Meld、DiffMerge或OpenDiff
注意:您也可以使用.
(而不是文件名)来查看当前目录的更改。
为了检查每行的更改,请使用:git blame
,它将显示在哪个提交中提交了哪行。
要在提交之前查看实际文件(其中master
是您的分支),请运行:
git show master:path/my_file
如果您想将文件与上一次提交进行比较,则需要考虑的另一种更为迂腐的技术:
git diff master myfile.txt
这种技术的优点是,您还可以将其与倒数第二次提交进行比较:
git diff master^ myfile.txt
在此之前的一个:
git diff master^^ myfile.txt
如果您不在master分支上,也可以用"~"代替插入符号"^",用"您的分支名称"代替"master"。
您是否尝试过git commit
的-v
(或--verbose
)选项?它在消息编辑器中添加提交的diff。
我认为这是保证GUI的完美用例。-尽管我完全理解,在命令行内也可以很好地实现这一点。
就我个人而言,我的每一次承诺都是从gitgui开始的。在其中,如果有意义的话,我可以用单独的大块/行进行多个原子提交
Gut Gui能够在格式良好的彩色界面中查看diffs,相当轻松。看起来这也是你应该结账的东西。
在macOS上,转到git根目录并输入git diff *
除了使用专用的提交GUI之外,我发现的最好的方法是使用git difftool -d
-这将在目录比较模式下打开diff工具,将HEAD与当前脏文件夹进行比较。
git difftool -d HEAD filename.txt
这显示了在终端中使用VI狭缝窗口的比较。
diff可以用git diff
来完成(后面跟着文件名,如果你想查看所有修改文件的diff,可以不加任何内容)。但是,如果您已经执行了类似git add *
的操作,则必须先撤消git restore --staged .
。