Git分支合并

当我们用Git协同工作时,通常是有多条分支的,例如,master,dev,feature1等。master分支是主分支,是我们最重要的分支,dev分支是开发分支,在dev分支上完成开发工作的,如果dev开发完毕了,就得用master分支去合并dev分支。这个时候就需要merge操作了。

下面就让我们了解一个完成的开发到合并的流程。

1.建立新的分支dev,创建新文件abab.txt,提交。

$ git checkout -b dev
Switched to a new branch ‘dev‘
$ touch abab.txt
$ echo "abab" >abab.txt
$ git add .
warning: LF will be replaced by CRLF in abab.txt.
The file will have its original line endings in your working directory.

$ git commit -m "add abab.txt"
[dev d5ada67] add abab.txt
warning: LF will be replaced by CRLF in abab.txt.
The file will have its original line endings in your working directory.
 1 file changed, 1 insertion(+)
 create mode 100644 abab.txt

   2.切换到master分支,然后合并feature1分支。

$ git checkout master
Branch master set up to track remote branch master from origin.
Switched to a new branch ‘master‘

$ git merge dev
Updating 064968e..d5ada67
Fast-forward
 2.txt    | 2 +-
 abab.txt | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 abab.txt

  可以看到合并成功了,并且使用的是Fast-forward模式的合并。

3.查看合并分支情况

$ git log --graph --pretty=oneline --abbrev-commit
* d5ada67 add abab.txt
* e416f28 add something new in 2.txt
* 064968e add dev.txt in dev

  可以看到在dev中commit -m的信息直接到master中了,从这个分支合并的图中根本看不出是从别的分支中合并过来的,就在是在master分支中提交的一样。这就是Fast-forward合并的情况。

4.删除分支

$ git branch -d dev

以下用图来表明上述整个过程。

初始状态:在master分支下,HEAD指向最新的版本

建立dev分支,HEAD指向dev的最新的版本

在dev分支中提交abab.txt

在master分支中合并dev分支

删除dev分支

可以看到master分支在合并的时候,master是直接指到dev分支上去的。并没有在自己的分支上去做一份commit。能否不采用fast-forwards合并呢?

下面来看不采用fast-forwards合并的情况。

省略建立分支dev2,创建文件nba.txt,提交的过程,直接到master中合并dev2的时候。

$ git merge --no-ff -m "merge with no-ff" dev2
Merge made by the ‘recursive‘ strategy.
 nba.txt | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 nba.txt

  使用--no-ff可以指定不使用fast-forwards方式合并。

查看合并情况。

$ git log --graph --pretty=oneline --abbrev-commit
*   21494a8 merge with no-ff
|| * db0d081 add nba
|/
* d5ada67 add abab.txt
* e416f28 add something new in 2.txt
* 064968e add dev.txt in dev

  与之前使用fast-forwards合并的情况一对比,就发现这两种情况的不同了,no-ff的合并是能看到明显的与其他分支合并的情况的。其他的分支进行的修改就是“add nba”。并且使用no-ff合并相当于在master合并了dev2后,又自己commit了一次。这种方法比ff好的 地方在于办证了master主线的完整性,但是缺点就是不如ff那么快。

以下是合并的图解

总结一下:1.当你的分支是有新的功能点的时候,系统合并默认是采用ff模式的。

2.可以使用--no-ff来强制不采用ff模式合并。这样可以保证master主线的完整性。

参考:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013758410364457b9e3d821f4244beb0fd69c61a185ae0000

https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001375840038939c291467cc7c747b1810aab2fb8863508000

时间: 2024-08-05 05:55:53

Git分支合并的相关文章

Git分支合并冲突解决(续)

接Git分支合并冲突解决,在使用rebase合并冲突情况下,如果不小心,执行完add后执行了commit,此时本地仓库HEAD处于游离态(即HEAD指向未知的分支),如何解决? 解决方法 (1)此时,分支处于 无分支 状态,创建并切换到新分支(git checkout -b conflict),从而解决HEAD游离状态: (2)放弃此次rebase操作(git rebase --abort): (3)在dev分支上merge新分支,出现冲突(git merge conflict): (4)冲突修

git分支合并、撤销;git修改已push的commit信息; git 撤销操作;

git分支合并 1.分支代码提交 2.git branch 查询本地分支 3.git checkout 分支名1 切换分支到需要合并的分支上 4.git merge 分支名2  //选择要合并到 分支名1 的分支名2 eg: 如果develop_screen分支合并到develop分支上,这个时候切换到develop分支上, git merge develop_screen 5.合并之后可能会有冲突,可用git status 查看冲突代码 <<<<<<<  ===

Git 分支合并

理解核心 Git最初只有一个分支,所有后续分支都是直接或间接的从这个分支切出来的. 在任意两个分支上,向前追溯提交记录,都能找到一个最近的提交同时属于这两个分支,这个提交就是两个分支的分叉节点 分支合并,就是把其它分支相对于分叉节点发生的变化合并到当前分支中. Git合并(merge)的是变化! 假设情景 时间点1:两个分支master和dev,现在这两个分支完全一样,处在同一个提交(commit)上,内容含A.B.C.D四部分. 时间点2:dev上开发新内容,不断修改提交,最后dev分支的内容

Git分支合并选择

用Git进行多人协作开发时,必然会合并代码,解决冲突.然而合并代码也是需要点技巧的,如果对一些关键命令没有理解去使用的话,git的版本演进路线就会变得很乱,从而造成了日后维护的一些麻烦. Git上合并代码有git merge 以及 git rebase 两种方式.下面将深入两者的用法以及对两者的适用场景作个总结. 前置知识点 Master分支:首先,代码库应该有一个.且仅有一个主分支.所有提供给用户使用的正式版本,都在这个主分支上发布.这个分支被称为Master分支: Develop分支:主分支

git 分支 合并

Git如何进行分支管理? 1.创建分支      创建分支很简单:git branch <分支名> 2.切换分支      git checkout <分支名>      该语句和上一个语句可以和起来用一个语句表示:git checkout -b <分支名> 3.分支合并      比如,如果要将开发中的分支(develop),合并到稳定分支(master),      首先切换的master分支:git checkout master.      然后执行合并操作:g

git 分支合并 强制合并

常用的提交流程git add *.XXXgit commit -m "备注....." # 提交到本地分支git fetch git merge #"合并远程分支情况,如果有冲突解决冲突,并再commit 一次"git push orgin/master #"最后在进行提交合并" ====================================================================================

Git 分支合并冲突及合并分类

分支合并冲突 ##创建分支datagrand git checkout -b datagrand Switched to a new branch 'datagrand' git branch -a master \* datagrand ##在datagrand分支上创建文件 echo "this is git file!" > read.txt git add read.txt git commit -m "add a new file" git push

Git分支,合并,切换分支的使用

1.创建合并分支 在我们每次的提交,Git都把它们串成一条时间线,这条时间线就是一个分支.截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支.HEAD指针严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支. 一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点: 每次提交,master分支都会向前移动一步,这样,随着你不断提交

eclipse中解决git分支合并冲突

冲突场景: 在master分支上有文件student.py. 在master上增新一个dev分支 在dev分支上修改文件student.py.增加函数def d():,并commit; 在master分支上修改文件student.py.删除函数def a():,并commit; 在master分支上合并dev分支,git提示冲突,如下图: 原因分析: 在master和dev分支上均对文件student.py进行了修改,导致合并是出现错误,具体原因可以见 http://www.liaoxuefen