创建分支

问题

假设本地的某个git repository下有a.md文件,刚开始的时候只有master分支,则该文件只有一行内容;此时,我们在该repository下新建一个dev分支;然后在master分支在第一行的基础下我们添加一行并提交,在dev分支下也添加一行不同的内容并提交;那么两次提交后a.md的文件内容到底是什么样的?

实验

1、准备目录与文件

创建一个目录learngit,且在该目录下新建一个a.md文件,文件内容为

$ cat a.md
initial row

2、初始化git仓库

在该目录下依次执行以下命令来初始化仓库

$ git init
$ git add a.md
$ git commit -m "initialization"

此时该仓库就会有一个master分支,可用git branch命令查看分支信息;其中 * 表示当前所在的分支

$ git branch
* master

3、创建分支dev

在learngit目录下执行命令`git branch dev`创建dev分支,再次查看分支信息

$ git branch
  dev
* master

此时在master与dev分支下查看到的文件内容都是一样的

4、master分支更改

在master分支下,在文件a.md的尾部添加一行`row added by master`,然后执行以下命令提交

git add a.md
git commit -m "master appends a row"

此时查看a.md的内容

$ cat a.md
initial row
row added by master

执行命令`git checkout dev`切换到dev,查看文件内容;发现文件内容并没有发现master添加的那一行

$ cat a.md
initial row

5、dev分支更改

在dev分支下,在文件a.md的尾部添加一行`row added by dev`,然后执行以下命令提交

git add a.md
git commit -m "dev appends a row"

此时查看a.md的内容

$ cat a.md
initial row
row added by dev

执行命令`git checkout master`切换到master,查看文件内容;发现文件如下

$ cat a.md
initial row
row added by master

6、其他发现

执行完上面的5个步骤后, 我们不再修改文件内容,而只是执行`git checkout master`或`git checkout dev`来切换分支,结果发现每次执行切换分支命令,a.md的修改时间都会发生变化,而且就是执行切换分支命令的时间

结论

1、我们在哪个分支下,就只会看到那个分支的内容

2、当在一个分支下修改了内容,却没有commit就切换到另一个分支时,就会报错,拒绝切换(已验证)

分析

当每一次执行git checkout [branch]时,git会把该分支的内容复写到该目录下,这样我们每次切换分支后,看到的都是该分支的内容,而且文件的修改时间也是执行切换分支命令的时间

Last updated