# 创建分支

## 问题

假设本地的某个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会把该分支的内容复写到该目录下，这样我们每次切换分支后，看到的都是该分支的内容，而且文件的修改时间也是执行切换分支命令的时间


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://pshizhsysu.gitbook.io/git/ben-di-cang-ku/fen-zhi-guan-li/chuang-jian-fen-zhi.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
