本地分支管理
创建和切换分支
创建分支
在本地终端运行 git branch『分支名称』 新建一个分支,如新建一个名为『learn-branch』的分支命令如下:
python
$ git branch learn-branch
切换分支
创建完分之后使用git branch命令查看分支:
python
$ git branch
* master
learn-branch
可以看到『 master 』分支上有一个『*』,说明当前是处在『 master 』分支上,也就是说创建完分支后需要我们手动切换到『learn-branch』,使用git checkout 『分支名称』命令:
python
$ git checkout learn-branch
Switched to branch 'learn-branch'
再使用git branch命令查看,会发现已经切换到『learn-branch』分支:
python
$ git branch
* learn-branch
master
创建和切换分支两条命令可以合起来,使用git checkout -b『分支名称』命令可以创建一个分支并切换到此分支上。
合并分支
快进模式合并
快进式合并分支,也叫『Fast Foreword』,简单的理解就是当要合并的分之和目标分支之间没有冲突,只是多做了一些修改时就会采取『Fast Foreword』模式。
例如,我们切换到新建的『learn-branch』分支上,对『learn-git.txt 』文件加一行文字:
I am learning to use git.
然后提交此文件:
$git add learn-branch.txt
$git commit -m "edit learn-git.txt"
[learn-git fce6c4e] branch test
1 files changed, 1 insertions(+)
接着使用$ git checkout master命令切换回『 master 』分支,再查看『learn-git.txt 』文件,发现刚才添加的内容并不存在!因为那个提交是在『learn-branch』分支上,而『 master 』分支此刻的提交点并没有变。
现在,我们把『learn-branch』分支的内容合并到『 master 』分支上:
$ git merge learn-branch
Updating ca62ea0..fce6c4e
Fast-forward
learn-branch.txt | 1 +
1 file changed, 1 insertion(+)
git merge命令用于合并指定分支到当前分支,示例中是把指定分支『learn-branch』合并到『 master 』分支上。
合并完成后会发现『 master 』分支上的『learn-git.txt 』文件内容和在『learn-branch』分支上编辑后的内容完全一样。此时如果想删除『learn-branch』分支,可以使用命令$ git branch -d 『分支名称』。
普通模式合并
当要合并的分之和目标分支之间存在冲突,就无法使用快进合并模式,需要先手动解决冲突,再提交。
例如,我们先切换到『learn-branch』分支,在『learn-git.txt 』文件中写入下面文字并提交:
I am on "learn-branch" branch.
然后切换到『 master 』分支,在『learn-git.txt 』文件中写入下面文字并提交:
I am on "master" branch.
接着输入git merge learn-branch命令:
$ git merge learn-branch
Auto-merging learn-branch.txt
CONFLICT (content): Merge conflict in learn-git.txt
Automatic merge failed; fix conflicts and then commit the result.
Git 返回结果提醒我们『learn-git.txt 』文件存在冲突,需要我们手动解决冲突。运行 git status 命令,也可以看到出现冲突状况:
$ git status
On branch master
You have unmerged paths.
(fix conflicts and run "git commit")
Unmerged paths:
(use "git add ..." to mark resolution)
both modified: learn-git.txt
no changes added to commit (use "git add" and/or "git commit -a")
现在我们打开『learn-git.txt 』,会发现 Git 加入了冲突解决标记:
<<<<<<< HEAD
I am on master branch
=======
I am on learn-branch branch
>>>>>>> learn-branch
可以看到 ======= 隔开的上半部分,是 HEAD(即 master 分支,在运行 merge 命令时的工作分支)中的内容,下半部分是在 learn-branch 分支中的内容。解决冲突的办法无非是二者选其一或者人工亲自整合到一起。把上述内容修改为这样:
I am on master branch
接下来运行 git add 来告诉 Git 冲突已经解决,并运行 git commit 来完成合并:
$git add learn-git.txt
$git commit -m "conflict resolved"
[master cadd265] conflict resloved
网友评论