令我懵逼的git命令
这篇文章主要记录本小白,初次学习使用git是遇见的坑和难以立刻理解的问题。为了日后回顾和交流,当然了能帮助到一些朋友也是极好的撒,哈哈哈。以下仅为鄙人愚见,如有错误欢迎指出。
add,commit
当我们在本地初始化仓库以后,在去编辑的文件可以分为三种状态: 1.工作树状态(指你对文件进行操作的状态)。2.暂存区状态(当你add/stage 之后的状态)。3.最终状态(commit 之后的状态,这里的文件内容应该也是你push到github的内容)
这里有一个坑,起初我以为git add 只是让一个不在git版本管理范围内的新文件进入git管理的命令,一个新文件只要add一次就够了,以后的修改只要commit,但是大错特错。add还有一个同义命令stage。他们的作用是将你文件目前的状态放到暂存区并形成快照。比如:一个名为test.txt的文件我开始写了123,然后
git add test.txt 这个文件就会被放到暂存区且状态是写有123的状态,此时我接着续写456,但是不执行add。则最新编辑状态是123456,暂存区状态是123,最终状态因为我们尚未提交所以是null。也就是说我每次编辑后都要add到暂存区,之后才能commit。这里有一个命令,如果我执行git checkout – test.txt,那么test文件就会被恢复到暂存区的快照状态。也就是说123456会变成123.
git commit 用来把暂存区的文件提交到工作树内。这个需要加注释
git commit -m “注释”,或者git commit 但是这种不加参数的话会进入一个较长的注释编辑模式,反正就是加注释你是逃不掉的。
diff
diff命令是用来查看文件三个状态之间的差异的。下面借用了一张图,可以清晰地看到,工作树(操作目录),索引(暂存区,index/stage),数据库(最新提交版本)。
git diff 用来显示工作树和暂存区的差别,一个文件可以在commit之前多次add,当改动未add到暂存区时,此命令显示工作树和最新提交状态的差别。但是,当你add之后,暂存区又和工作树没差别。。。。没错就是这么绕~ 这时候git diff head命令就出现了,他可以显示工作树和最新提交的差别。git diff --cached(staged) 比较暂存区文件与上一次commit(也就是最新提交)的差别
我知道看到这里会这有点懵下面上图:
git diff :(比较1)查看工作树和暂存区的差别
git diff head :(比较3)查看工作树和最新提交状态的差别
git diff --staged :(比较2)查看暂存区和最新提交状态的差别
(cached)