Git · 二 git的工作树、版本库以及分支管理和git status -s、git checkout、git branch等相关指令的使用

先理解Git的空间概念(这引用了Runoob.com 的一张图)

 

工作区:指的是文件夹中所有非隐藏的文件

版本库:其实应该叫分支branch比较好理解(后面会仔细解释)

index(版本库的暂存区):这个也是git指令中 --cached,在工作区执行git add后就会添加代码快照到这个暂存区

以上三者的关系

1、工作区和暂存区(index)

(1)当每次修改代码和添加新文件提交到暂存区,通过执行

$git add . 
#或者
$git add --<某个文件>

提交后,修改的代码就会生成一份快照放到暂存区,此时你可以通过

$git status -s

查看当前工作目录和暂存区的状态

 

这里字母有有两列:

第一列是文件的状态(与暂存区的状态)

第二列是文件内容的状态(是否修改(未提交到暂存区的))

(2)从通过暂存区的代码恢复工作区的代码的状态

$git checkout -- <file>

注意:这个操作会覆盖你工作区指定文件的所做的修改,慎重操作!!

2、对于暂存区的操作

$git rm -r --cached .
#或者删除某一个
$git rm --cached -- <file>

这个指令用于删除暂存区内代码快照(. 一般是代表着所有的文件)

注意:如果接着执行了git commit提交到分支,此时分支上对应被文件也会被删除,再执行git push同步远程分支,此时远程分支上文件也会被删除。当远程分支上面的文件被删除了,其它跟随这个远程分支的人,只要执行git pull后,相应文件也会同样被删除了。(这样说有点绕,换句话说这样远程分支即github上的文件被删除,其实跟随它的分支都会跟着改变)

还有一点,

$git rm -- <file> #会同时删除暂存区和工作区相应的文件(即在目录上找不到这个文件了)
$git rm --cached -- <file> #只会删除暂存区的文件,此时工作区的文件会被保存
                           #但是不再与git相关(即不受版本控制)

3、分支和暂存区、工作区

从分支回退到之前的版本,先通过git reflog查看当前的历史提交信息

图中的HEAD@{n}  对应成指令就是HEAD~n  其中HEAD@{0} 直接写成HEAD

git reset --soft 、git reset --hard 和git reset -mixed区别

(1) git reset --hard

将暂停区和工作区的代码全部回退到指定版本,注意:不保留暂存区和工作区的记录

(2) git reset --soft

仅仅只是回退commit记录,不修改暂存区和工作区的记录

这个的使用场景是,当你觉得你的修改提交还不够完整,要回退,重新把完整的修改上传分支时可使用

(3) git reset -mixed 或者git reset

把暂存区回退,工作区不影响

现在来说一下版本库为什么叫分支恰当一点

    Git最突出的特点就是你可以建立多个分支,但是只存在一个目录,无需创建多个目录,我们可以使用git branch指令在不同分支进行切换和开发。当建立一个git环境,会建立一个master分支,作为默认的本地分支,如果不切换其它分支,我们所有修改都在这个分支内进行。所以图中版本库我觉得应该称为分支,三个空间应该称为工作区、暂存区、当前分支。我们可以通过切换不同分支来进行开发,不同分支内的代码互不相关,也可合并。

红色框指的是当前所在的分支,使用一下指令就可以查询所有的分支信息

$ git branch -a

前面有星号的,表示它就是当前所在的分支

创建新的分支,以当前分支克隆出来一个新的分支,新的分支与当前分支没有相关

$ git branch "master_copy"

切换不同分支

$ git checkout <branch>

注意:切换不同分支所有代码都需要commit,否者git会提示

注意:当你切换HEAD^此类的分支上,要特别注意,小心操作,此时HEAD会提示你处于游离状态。在非本地分支上,只要你切换分支,你所做的代码修改很容易丢失,最好的做法是,切换到历史分支上,在实例分支建立新的本地分支,然后再进行修改,与master分支进行合并修改,git也是这样提示的:

不同分支间的合并

$git merge <branch>

删除无用的分支。分支与本地主分支合并后,如果没有价值了,就可以删除了

$git branch -d <branch>

本章的大概内容到这里就结束了,文中指令我都有亲自测试过,均可用,如有错误欢迎大佬指出

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章