大家好,又见面了,我是全栈君。
例如以下图所看到的:
左側为工作区,是我们的工作文件夹。
右側为版本号库,当中:
index标记的是暂存区(stage),所处文件夹为.git/index,记录了文件的状态和变更信息。
master标记的是master分支所代表的文件夹树。HEAD指向master分支。
objects标记的是Git的对象库,所处文件夹为.git/objects。文件索引建立了文件和对象库中对象实体之间的映射关系。
通过该图我们能够清晰地看出add,commit等命令的转化关系。以下通过git diff和git status两条命令来理清它们之间的关系。
1.如果welcome.txt文件为空。我们首先在该文件里增加一行”1 Hello”,并通过git add和git commit提交到版本号库中:
$ git add welcome.txt $ git commit -m "1 Hello"
2.在welcome.txt文件里加入第二行”2 Git”。仅仅运行git add命令,不运行git commit:
$ git add welcome.txt
运行git status -s命令。输出例如以下:
能够看到第一列的M是绿色的,表示对于welcome.txt文件,master分支中的文件和暂存区中的文件内容不一致。
第二列的M不存在。表示对于welcome.txt文件,工作区中的文件和暂存区中的文件一致。明显是由于运行了git add操作使得工作区和暂存区中的文件内容同步。
3.在welcome.txt文件里加入第三行”3 Hello Git”。不运行git add命令。
输入git status -s。输出例如以下:
能够看到多了第二列的M。并且是红色的。表示对于welcome.txt文件。工作区中的文件和暂存区中的文件内容不一致。
4.Git diff魔法
(1)暂存区和工作区比較:git diff
$ git diff diff --git a/welcome.txt b/welcome.txt index 671036a..d6a88bb 100644 --- a/welcome.txt +++ b/welcome.txt @@ -1,2 +1,3 @@ 1 Hello -2 Git \ No newline at end of file +2 Git +3 Hello Git \ No newline at end of file
(2)HEAD和暂存区比較:git diff –cached
$ git diff --cached diff --git a/welcome.txt b/welcome.txt index f6abfb2..671036a 100644 --- a/welcome.txt +++ b/welcome.txt @@ -1 +1,2 @@ -1 Hello \ No newline at end of file +1 Hello +2 Git \ No newline at end of file
(3)HEAD和工作区比較:git diff HEAD
$ git diff HEAD diff --git a/welcome.txt b/welcome.txt index f6abfb2..d6a88bb 100644 --- a/welcome.txt +++ b/welcome.txt @@ -1 +1,3 @@ -1 Hello \ No newline at end of file +1 Hello +2 Git +3 Hello Git \ No newline at end of file
结合上面的图来看就不难理解了。
最后。给出原书作者的忠告:不要使用git commit -a,原因是这会让我们失去对提交内容进行控制的能力。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/116323.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...