完全掌握git(二)

1、前情回顾

完全掌握git(一)html

2、基本概念

① 工做区
所谓工做区,就是你在电脑里能看到的目录,能够简单地理解为咱们的项目根目录就是工做区。
② 版本库
所谓版本库,就是在项目根目录下执行git init命令以后,会在项目根目录下生成一个.git目录,正常状况下,这个.git目录是隐藏的,这个.git目录就是版本库
③ 暂存区
所谓暂存区,就是.git版本库目录中存放的index文件,因此咱们也会把暂存区叫做索引(index)区git

因此,完成一次提交包括三个步骤,首先对工做区中的内容进行修改,而后经过add命令将工做区的修改归入到暂存区中,最后将暂存区的修改经过commit命令提交到版本库中
1352126739_7909.jpgsegmentfault

3、status命令

git status命令用于查看当前工做区中所发生的修改,以及其中哪些修改已经添加到了暂存区中,简单说,就是status命令能够查看工做区中有哪些文件尚未被追踪哪些被追踪的文件被修改后有没有被添加到暂存区(当前在工做区仍是在暂存区)spa

> git status
On branch master
Changes to be committed:
 (use "git reset HEAD <file>..." to unstage)
 
new file:  foo.txt

Changes not staged for commit:
 (use "git add <file>..." to update what will be committed)
 (use "git checkout -- <file>..." to discard changes in working directory)
 
modified:  index.html 

Untracked files:

 (use "git add <file>..." to include in what will be committed)

bar.txt

能够看到,bar.txt是新添加的文件,尚未被git追踪;index.html是已经被追踪的文件,在工做区中修改后尚未提交到暂存区;foo.txt是在工做区中修改后同时将修改添加到了暂存区中。code

4、diff命令

git diff: 不带任何参数的git diff命令,是比较工做区和暂存区的差异。好比,工做区中某个文件发生了修改,可是还未添加到暂存区中,此时工做区和暂存区是有差异的,经过git diff命令便可查看到工做区的修改内容。
git diff --cached: 带上了--cached参数,此时同git diff --staged,比较的是暂存区和最后一次提交的差异。好比,工做区内容修改后,同时将工做区的修改添加到了暂存区中,那么此时,暂存区和最新一次提交是有差异的,由于目前最新一次提交是上次的提交。
git diff head: head表示的最后一次提交(最新的提交),是比较(工做区和暂存区)与最后一次提交的差异,便可以同时查看工做区、暂存区与最后一次提交的区别。htm

5、回退修改

① 取消工做区的修改: 若是对工做区的内容进行了修改,可是该修改尚未添加到暂存区,那么能够经过git checkout -- <file>的方式来取消工做区的修改。
② 取消暂存区的修改: 若是对工做区的内容进行了修改,同时该修改已经添加到了暂存区,那么能够经过reset命令来重置暂存区,由于工做区的修改提交到了暂存区,如今暂存区和最后一次提交出现了差异,因此咱们能够将暂存区重置到head位置,即最后一次提交的位置,便可恢复暂存区,即git reset head <file>,head后面不加文件名则表示重置暂存区中的全部文件。
③ 回退到某个版本: 若是通过一系列操做后,想要回到某个版本,那么能够经过git reset --hard <commit-id>回到指定的提交位置。不加--hard,也能够回到指定的提交位置,可是不会清空工做区的修改,只会清空暂存区的修改,而加上--hard则表示彻底回到指定的提交位置。blog

6、.gitignore文件

对应项目中的一些文件,咱们可能不想被版本库追踪。咱们能够在项目根目录下新建一个.gitignore文件,而后将不须要被版本库追踪的文件添加到.gitignore文件中。须要注意的是,.gitignore文件只能忽略还未被版本库追踪的文件。对于已经被版本库追踪的文件,若是也想忽略,怎么办呢?已经被版本库追踪的文件之因此不能被忽略,是由于该文件在暂存区中,因此若是咱们把该文件从暂存区中删除不就能够了吗。索引

> git rm --cached <file>

> git add <file>

> git commit --message 'untrack some file'

不过,该方法有一个很差的地方就是从暂存区中删除后,须要提交一次。咱们还能够经过 git update-index --assume-unchanged <file> 那么该文件就不会被版本库追踪了,也不须要将其加到.gitignore文件中。若是想恢复,那么能够执行git update-index --no-assume-unchanged <file>get

7、stash命令

当咱们在某些事情进行到中间的时候,忽然发现须要先快速修复某个问题,可是咱们又不想丢弃以前的工做,那么咱们能够经过 git stash命令将这些工做区和暂存区的修改都保存到本地。执行git stash命令后,工做区和暂存区当即变干净了,此时能够着手一些更紧急的bug,等bug修复后,再以前的工做恢复出来,能够经过 git stash pop将栈顶的stash恢复。也能够经过git stash list查看全部的stash,而后恢复指定的stash,如:it

> git stash
Saved working directory and index state WIP on master: 3f5aa1b add bar.txt

> git stash list
stash@{0}: WIP on master: 3f5aa1b add bar.txt

> git stash pop stash@{0}
相关文章
相关标签/搜索