[Git]4.1 分支与合并

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/oscar999/article/details/83549276
    branch-分支,是基本所有的版本管理工具都有的功能。有分支,肯定就有主干。在SVN,Perforce版本管理工具中,主干习惯被称作Trunk, 在Git中, 主干被称作master。
    主干、分支的概念来自于树的形象化。Perforce等工具,一个分支对应的就是一个新的目录及数据的复制。而Git不会进行数据的复制,只是创建一个分支的指针指向创建分支的提交对象(Commit)。所以,创建一个分支的速度非常快。 在Git中, master也被认为是一个分支,在初始化库的时候会默认建立出来。
  1. 查看分支
git branch

这个命令会显示本地库所有的分支。如果没有创建过新的分支, 输出的结果会是

* master

maser是初始库的时候的默认分支, 前面的*号, 代表的是当期处于哪个分支。

如果要查看本地库和远端库所有的分支,使用:

git branch -a
  1. 创建分支
git branch $branchname

$branchname 是 新建的branch的名字。

  1. 切换分支
git checkout $branchname

如果不是新建分支的话, 可以使用checkout切换分支。 checkout命名在一般的版本管理工具中是用来检出代码的。在git也是, 在切换分支时, 会使用该分支最后提交的快照替换工作目录的内容。

在Perforce等工具中, 切换分支基本上会切换目录,在Git中就不需要了。同一个目录, 可以在不同的branch之前切换。

如果加上参数 -b 的话, checkout命名也可以用来创建分支并切换。

git checkout -b $branchname
  1. 合并分支
git merge $branchname

$branchname是被合并的branch的名字, 合并前首先要确保当前的分支是合并到的分支, 一般来说是master。
在合并分支的时候, git 会做文件的增删以及文件本身的合并修改, 有可能产生合并冲突, 需要解决冲突之后提交。

  1. 删除分支
git branch -d  $branchname

如果分支不需要了, 可以进行删除。一般在软件项目中, 因为解决某些Bug或是小改动而开出来的branch,在回归master之后就可以进行删除了。


练习


练习场景:

  1. 新建branch, branch名: mybranch。在新branch上新增、删除和修改文件。
  2. 在master上修改和branch相同的文件。(制造冲突)
  3. 合并分支与解决冲突
  4. 合并提交与删除分支

步骤:

  1. 准备工作
  • 在D盘下建立如下目录: D:\gittraining\chp4
  • Git CMD切换到此目录,使用git init初始化本地库
  • 新增两个文件 filemodify.txt , filedelete.txt; 内容都是: master first line
  • 使用: git add *.txt添加到暂存区, 并提交到本地库。git commit -m "master first commit"
  • 使用 git branch 可以看到当前只有一个master的分支。
  1. 新建mybranch分支(branch和checkout命令都可以做到)。
git branch mybranch

再查看一下分支就有两个了, 当前的分支还是在master.

3.切换分支

git checkout mybranch

目前分支中的文件和master是完全一样的。

  1. 在分支中新增文件fileadd.txt, 内容:first line-mybranch add
    修改filemodify.txt, 新增一行:second line - mybranch add
    删除filedelete.txt

  2. 将分支改动add后提交。


git add *.txt
git commit -m "mybranch first commit"
  1. 切换到master分支, 并修改 filemodify.txt
git checkout master

filemodify.txt新增一行: third line - master add

完成后, add 并提交到 master.

git add filemodify.txt
git commit -m "master second commit"

到现在为止,先是 mybranch中删除了filedelete.txt,新增了fileaddtxt, 修改了filemodify.txt, 随后在master中修改了filemodify.txt。
将mybranch 合并到master的话, 预计filemodify.txt会产生冲突。

  1. 将mybranch上的改动合并到master上。
    确保当前所在的分支是master,如果不是可以用git chekcout 进行切换。
git merge mybranch

执行完成之后,出现如下提示:

D:\gittraining\chp4>git merge mybranch
Auto-merging filemodify.txt
CONFLICT (content): Merge conflict in filemodify.txt
Removing filedelete.txt
Automatic merge failed; fix conflicts and then commit the result.

移除了filedelete.txt 文件,对filemodify.txt 文件的自动化合并失败, 需要手动解决冲突。打开filemodify.txt文件

first line
<<<<<<< HEAD
third line - master add
=======
second line - mybranch add
>>>>>>> mybranch

把 <<<<<<< 和 ========= 行的内容删除后保存。

  1. 把filemodify.txt添加到暂存区。 新增和删除的文件的改动已经在缓存区了。
git add filemodify.txt
  1. 把暂存区的所有改动提交
git commit -m "merge mybranch to master"

使用git log --graph --oneline看一下提交的日志

 D:\gittraining\chp4>git log --graph --oneline
*   f3b7449 merge mybranch to master
|\
| * cad8fde mybranch first commit
* | e6e9842 master second commit
|/
* 436868e master first commit

  1. 删除mybranch
D:\gittraining\chp4>git branch -d mybranch
Deleted branch mybranch (was cad8fde).

再查看一下log , 和没删除mybranch之前是一样的。也就是删除branch后, 之前branch提交的log还是保持。

猜你喜欢

转载自blog.csdn.net/oscar999/article/details/83549276