Git Checkout 分支

时间:2020-02-23 14:33:21  来源:igfitidea点击:

在本教程中,我们将学习在Git中检出分支。

在上一个教程Git Branch中,我们学习了如何创建新分支。

假设我们有一个项目,并且想要列出该项目中的所有分支。
因此,我们将使用git branch命令。

$git branch
  dev
* master

从上面的输出中,我们可以知道项目中有两个分支,并且我们当前在master分支上。

检出分支

要切换(签出)到分支,我们使用git checkout [branch-name]命令。

在下面的示例中,我们正在检查dev分支。

$git checkout dev
Switched to branch 'dev'

在我们检出一个分支后,所有使用git add和git commit命令保存(提交)的更改都保存在该分支中。

当我们检出分支时会发生什么?

当我们检出分支时,工作目录中的文件将更新以匹配该分支中存储的版本。

因此,如果我们在可以说的dev分支中添加一个新文件,那么当我们切换回master分支时,它将不再存在。

让我们用一个例子来理解这一点。
在以下输出中,我们列出了master分支中的文件。

$git branch
  dev
* master

$ls -la
total 0
drwxr-xr-x   5   staff  160 Oct  5 14:15 .
drwxr-xr-x  30   staff  960 Oct  2 22:48 ..
drwxr-xr-x  15   staff  480 Oct  5 19:39 .git
-rw-r--r--   1   staff    0 Sep 18 21:10 index.php
drwxr-xr-x   3   staff   96 Sep 12 19:46 js

现在,切换到dev分支并创建一个新的sample.php文件。

$git checkout dev
Switched to branch 'dev'

$touch sample.php

现在,我们将列出文件并检查存储库的状态。

$ls -la
total 0
drwxr-xr-x   6   staff  192 Oct  5 19:41 .
drwxr-xr-x  30   staff  960 Oct  2 22:48 ..
drwxr-xr-x  15   staff  480 Oct  5 19:41 .git
-rw-r--r--   1   staff    0 Sep 18 21:10 index.php
drwxr-xr-x   3   staff   96 Sep 12 19:46 js
-rw-r--r--   1   staff    0 Oct  5 19:41 sample.php

$git status
On branch dev
Untracked files:
  (use "git add <file>..." to include in what will be committed)

	sample.php

nothing added to commit but untracked files present (use "git add" to track)

在上面的输出中,我们可以看到在dev分支中有一个未跟踪的文件。
因此,我们将暂存(git add)和提交(git commit)文件。

$git add .

$git commit -m 'initial commit'
[dev 510d006] initial commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 sample.php

 $git status
On branch dev
nothing to commit, working tree clean

$ls -la
total 0
drwxr-xr-x   6   staff  192 Oct  5 19:41 .
drwxr-xr-x  30   staff  960 Oct  2 22:48 ..
drwxr-xr-x  15   staff  480 Oct  5  2016 .git
-rw-r--r--   1   staff    0 Sep 18 21:10 index.php
drwxr-xr-x   3   staff   96 Sep 12 19:46 js
-rw-r--r--   1   staff    0 Oct  5 19:41 sample.php

现在,如果我们检出master分支,将看到master分支中不存在sample.php。

$git checkout master
Switched to branch 'master'

$ls -la
total 0
drwxr-xr-x   5   staff  160 Oct  5 19:47 .
drwxr-xr-x  30   staff  960 Oct  2 22:48 ..
drwxr-xr-x  15   staff  480 Oct  5 19:47 .git
-rw-r--r--   1   staff    0 Sep 18 21:10 index.php
drwxr-xr-x   3   staff   96 Sep 12 19:46 js

我们看不到sample.php文件,因为它是在dev分支中提交的。

创建和签出分支

我们可以使用git checkout -b [branch-name]命令创建和签出新分支。

这将从当前所在的分支创建一个新分支,然后签出新分支。

例:

如果我们在master分支上,然后使用git checkout -b sample命令创建一个新的分支示例。
示例分支将具有一个指向master分支中最后提交的指针。

我们也可以在现有分支的基础上创建一个新分支,然后使用git checkout -b [new-branch] [existing-branch]命令进行签出

例:

如果我们在master分支上,并且想创建一个新的sample分支,但是这次我们希望Sample分支的指针指向现有的dev分支。
因此,我们将使用git checkout -b sample dev命令。