Git 分支合并

理解核心

Git最初只有一个分支,所有后续分支都是直接或间接的从这个分支切出来的。

在任意两个分支上,向前追溯提交记录,都能找到一个最近的提交同时属于这两个分支,这个提交就是两个分支的分叉节点

分支合并,就是把其它分支相对于分叉节点发生的变化合并到当前分支中。

Git合并(merge)的是变化!

假设情景

时间点1:两个分支master和dev,现在这两个分支完全一样,处在同一个提交(commit)上,内容含A、B、C、D四部分。

时间点2:dev上开发新内容,不断修改提交,最后dev分支的内容是A、b‘、D、E。修改B为b‘,删除内容C,新增内容E。

时间点3:master分支发现bug,在该分支修改bug并提交,最后master分支内容是A、b‘‘、c、F。修改内容B为b‘‘,修改内容C为c,删除内容D,新增内容F。

时间点4:此时,如果把master分支合并到dev分支上,master和dev上的内容是什么呢?

合并过程

git checkout dev  # 切换到dev分支
git merge master  # 合并master分支

合并merge做的几件事儿:

1、在dev上删除D,新增F。

  这是master分支在时间点3上相对于时间点1发生的部分变化,D在dev分支上没有变化过,F相对于dev是新内容,合并时没有冲突,可直接合并。

2、C上产生冲突,该冲突是"修改、删除"两种不同动作引起的。

  时间点2上dev删除了C,时间点3上master修改了C,删除和修改的对象都是同一个C。相对于时间点1,产生了不一致的变化,无法直接合并。

3、B上产生冲突,该冲突是内容变化后不一致引起的。

  时间点2上dev修改B为b‘,时间点3上master修改B为b‘‘,修改后B内容不一致。相对于时间点1,也是产生了不一致的变化,无法直接合并。

merge遇到无法合并的冲突(conflict)时,会先记录下冲突信息,然后跳过冲突继续合并后面的内容,直至合并完所有可以合并的内容后,只剩下无法合并的冲突。此时,merge再也无法继续执行了,只能被迫中断。中断前merge做了最后一件事儿,就是在dev分支上标识出冲突信息,提示用户需要解决冲突,然后再自行完成merge后面的操作——提交合并后的新commit到版本库。

如果合并过程顺利,是不会产生冲突的,merge就可以在合并完成后,自行提交新commit到版本库。

这种合并方式是真实的合并(TRUE MERGE),合并后会在dev分支上产生一个新的commit。还有一种合并方式是快进合并(FAST-FORWARD MERGE),这种方式不会产生新的commit。

解决冲突

1、删除C

2、修改B为正确内容b‘‘‘

3、解决冲突后,提交一个新的commit

至此,分支内容如下:

master:A、b‘‘、c、F(master是被合并的,所以自己的内容不会变化)

dev:A、b‘‘‘、E、F(合并了master在时间点3上相对于时间点1发生的所有变化,并解决了冲突,生产了新commit)

时间: 2024-12-11 08:17:59

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的版本演进路线就会变得很乱,从而造成了日后维护的一些麻烦. 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协同工作时,通常是有多条分支的,例如,master,dev,feature1等.master分支是主分支,是我们最重要的分支,dev分支是开发分支,在dev分支上完成开发工作的,如果dev开发完毕了,就得用master分支去合并dev分支.这个时候就需要merge操作了. 下面就让我们了解一个完成的开发到合并的流程. 1.建立新的分支dev,创建新文件abab.txt,提交. $ git checkout -b dev Switched to a new branch 'dev'

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