git分支管理

本地分支管理

创建和切换分支

创建分支

在本地终端运行 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

你可能感兴趣的:(git分支管理)