git合并

来源:互联网 发布:精通vb黑客编程 pdf 编辑:程序博客网 时间:2024/05/18 00:34

1、合并

    你在一个分支上完成了一个新的功能之后,你想把那个新功能添加到主分支,以便其他的人都可以使用。你可以通过Git merge或者git pull命令来实现。

    这两个命令的语法是:

    git merge [head]

    git pull . [head]

    在执行结果上,它们是类似的。(虽然现在看来,merge更简单,但是当有多个开发者时,pull就更常用了)。

    这些命令执行以下操作,当前head被称为 current,要被合并的head被称为merge。

    (1) 识别current和merge的公共祖先,我们称为ancestor-commit 。

    (2) 处理简单情况.如果ancestor-commit等于merge,那么什么都不用做。如果ancestor-commit等于current,那么执行快速前向合并。

    (3) 否则,找出ancestor-commit和merge之间的改变。

    (4) 试图与current中的文件合并那些改变。

    (5) 如果没有冲突,创建一个新commit,它包括两个父亲current和merge。设置current(以及HEAD)指向这个新的commit,并且更新当前工作文件。

    (6) 如果有冲突,插入一个合适的冲突标记并且通知用户。不创建commit。

    注意:在执行合并之前保证所有的更改都已经commit

    所以,要实现上面的例子,例如你check out 了master head并且写入了新的数据,现在你想要添加这些新的改变。仓库看起来是这个样子:

                    +---------------------(D)

                  |                                |

(A)---------(B)--------(C)-------------------------(E)

                                                   |                    |

                                         fix-headers       master

                                                                        |

                                                                     HEAD

    E是反映包含新数据的完成的版本。

    你可以运行: git merge fix-headers

    如果没有冲突,最终版本是这个样子:

                            +---------- (D) ---------------+
                           /                   |                          \
             (A) -- (B) -- (C) -------------- (E) ------(F)
                                               |                           |
                                     fix-headers             master
                                                                           |
                                                                       HEAD

2、解决冲突

    当要合并的commit在同一个地方进行更改时,冲突产生。

    要解决冲突,编辑文件以修中产生冲突的更改。然后,运行git add 来添加更改的文件,并且运行git commit来提交修改后的合并。Git 记住了你在合并过程中,所以会正确设置commit的父亲。

3、快速前向合并

    快速前向合并是在特殊情况下的合并优化。例如你的仓库是这个样子:

                      +--(D)--(E)                  

                      /              |

    (A)--(B)--(C)           |

                     |              |

            current        to-merge

                    |

             HEAD

    在运行git merge to-merge时,只需要把HEAD指向to-merge即可。

4、通常的合并模式

    有两种合并的使用方法:

    第一是将新特性合并到主分支中。

    第二是将主分支合并到你正在开发的分支中去。缺点是你开发的分支会包含越来越多的合并冲突。解决这个问题的另一个方法是rebasing,尽管他有自己 的问题。

5、删除分支

    在将一个开发的分支合并到主分支后,你可能不在需要这个开发分支,那么,你可能要删除它。

    要删除一个分支,使用git branch -d [head].命令。

0 0
原创粉丝点击