git diff命令解析
diff里面a表示前面那个变量,b表示第二个变量
HEAD commit版本
Index staged版本
(-)创建演示目录test_git,添加文件a.txt
mkdir test_git
git init
touch a.txt
git add a.txt
git commit a.txt -m '首次提交'
git push
a、查看尚未暂存的文件更新了哪些部分,不加参数直接输入
git diff
此命令比较的是工作目录(Working tree)和暂存区域快照(index)之间的差异
也就是修改之后还没有暂存起来的变化内容
echo "i am a file" > a.txt
git diff a.txt
结果如图,我刚才修改的a.txt文件的区别被显示出来,但是注意这是和Index(暂存区)做的比较。先附上git暂存区的概念图:
b、查看已经暂存起来的文件(staged)和上次提交时的快照之间(HEAD)的差异
git diff --cached
git diff --staged
1)给a.txt文件添加一行,然后添加到暂存区
root@iZ28npoowsjZ:~/test_git# echo "3.i fuck this file">>a.txt
root@iZ28npoowsjZ:~/test_git# git add a.txt
root@iZ28npoowsjZ:~/test_git# git diff --staged
显示的是下一次commit时提交到HEAD的内容(不带-a情况下),这里我有一个误区,总以为add命令只是第一次添加文件的时候才会使用,其实git add 命令可以把所有当前的修改都先保存到暂存区。
git commit
命令才是将暂存区的命令提交到本地master。
git push
命令是把本地master的变化push到远程master。
c、显示工作版本(Working tree)和HEAD的差别
git diff HEAD
这里我算是知道了,git diff
命令不加参数的时候就是用本地工作目录下的代码进行比较的。
d、直接将两个分支上最新的提交做diff
git diff topic master 或 git diff topic..master
e、输出自topic和master分别开发以来,master分支上的changed。
git diff topic...master
f、查看简单的diff结果,可以加上–stat参数
git diff --stat
g、查看当前目录和另外一个分支的差别
git diff test
显示当前目录和另一个叫’test’分支的差别
git diff HEAD – ./lib
显示当前目录下的lib目录和上次提交之间的差别(更准确的说是在当前分支下)
h、比较上次提交commit和上上次提交
git diff HEAD^ HEAD
i、比较两个历史版本之间的差异
git diff SHA1 SHA2