Git Checkout 分支
在本教程中,我们将学习在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
命令。