Git的基本命令
Git的四个工作区域
-
Remote:远程仓库
-
Repository: 本地仓库
-
Index: 暂存区
-
Workspace: 工作区
-
执行
git init
初始化库。 -
通过
git config --global user.name XXX
以及
git config --global user.email XXXX
设置用户签名 -
git status
查看仓库状态 -
git reflog
查看版本信息 -
git log
查看版本详细信息 -
创建好文件
hello.txt
后: -
git add hello.txt
将文件追踪到暂存区 -
git commit -m "first commit" hello.txt
提交第一个版本到本地仓库 -
git reset --hard 7位版本号
穿梭回对应版本(head指针指向该版本)
Git的分支
命令 | function |
---|---|
|
创建分支 |
|
查看分支 |
|
切换分支 |
|
把指定分支合并到当前分支 |
e.g. 我在master分支上创建并commit了第一个版本,在hot-fix分支上修改了这个版本
当master分支只有一个版本时
此时创建新分支
hot-fix
,版本信息中
head
指针变为指向两个分支,个人认为此时两个分支下共享同一个版本
此时在
hot-fix
分支下进行文件内容修改,是可以切换回
master
分支的,且
master
分支下文件内容改变,查看版本信息,两个分支下的版本相同,
head
指针仍然指向两个分支。
git add
后,修改后的文件被送入暂存区,版本信息不变,
此时仍然可以
git checkout
切换分支
切换到
hot-fix
后,
commit
之后,
hot-fix
视角下查看版本信息,发现版本改变,共有两个版本,当前
head
指向
hot-fix
下的新版本
而当我们再次切换回
master
分支,查看版本信息时,该分支只显示最初
commit
的**“first commit”**版本,
head
指向
master
分支下的该版本。
此时在
master
分支下,我们再次修改文件,并尝试
git checkout
切换,结果如下,这时已不能切换,提示信息要求我们在修改信息后
git commit
或
git stash
才能切换。
我们
commit
文件后,
master
显示两个版本:
切换到
hot-fix
,依然显示之前的两个版本:
个人理解与不懂的地方
head
是一个指向分支的指针,当
master
只有一个版本时创建新分支,此时显示的是**
HEAD ->master,hot-fix
,这点是不太理解的**,指针不该只指向一个分支嘛,此时的版本是两个分支共享的,在一个分支修改文件后可以不经过
add,commit
便切换到另一个分支,且分支的文件同步改变,难道是在
master
分支时指针指向为
head->master->hot-fix->commit的文件
,当切换到
hot-master
分支后改变指针指向为
head->hot-fix->master->commit的文件
吗
搜素相关内容,发现
工作区和缓存区内容是公共的,不从属于任何一个分支
,所以可以理解切换分支时内容同步改变,但是当再次
commit
一个版本后,两个分支便不再“共享”最初的版本,此时再尝试在一个分支中修改但不
add,commit
文件,便无法切换分支。
看了看四个工作区域的图,感觉又理解了一些,
个人理解
:
每次
git checkout
时都会从对应分支读取文件到工作区,起初时刚创建新分支时,由于新分支没有文件,此时两个分支的版本是“共享”的,切换分支时不会覆盖掉工作区文件;而在新的分支
commit
新版本后,两个分支开始独立,每次切换分支会将该分支的当前版本读取到工作区进行覆盖,所以在工作区修改文件但未
commit
就进行
checkout
时会进行判断和阻拦。(不知道对不对,并且还是不清楚最初”共享”的机制是不是上文理解的改变指针指向)