4.6 KiB
title | localeTitle |
---|---|
Understand How to Use Git Merge | 了解如何使用Git Merge |
我们假设您正在开发一个类似于Reddit的应用程序,但专门用于代码片段。在这样的应用程序中,您可能有一个包含所有已发布功能的master
分支,一个dev
分支,它可能包含已编码但尚未实现的功能。团队中的每个开发人员都将在dev
分支上创建自己的分支以获取各个功能。存储库结构看起来像这样:
--- Commit 3 --------- dev branch
/
--- Commit 1 ---- Commit 2 ---------------------------- master branch
如果您决定将第3次提交( Commit 3
)从dev
分支合并到master
分支中,那么它就像运行git merge
命令一样简单,因为dev
分支与master
分支是_最新_的:所有master
分支中的提交存在于dev
分支中。您可以通过运行以下命令来合并分支:
git checkout dev
git merge master
结果将是这样的:
--------- dev branch
/
--- Commit 1 ---- Commit 2 ---- Commit 3 -------------- master branch
现在您决定使用身份验证功能。要处理身份验证功能,请根据dev
分支创建另一个分支,并决定将其称为auth
。这就是repo结构的样子:
------ auth branch
/
--------- dev branch
/
--- Commit 1 ---- Commit 2 ---- Commit 3 -------------- master branch
如果你提交的任何更改auth
分公司,合并他们dev
的分支将是微不足道的,因为它是由最新与dev
分支。现在,当您正在研究身份验证功能时,其中一位开发人员完成了语法突出显示功能的编码,并决定将其与dev
分支合并。回购现在看起来像这样:
--- Commit 5 --- auth branch
/
--- Commit 4 ------ dev branch
/
--- Commit 1 ---- Commit 2 ---- Commit 3 ------------------------ master branch
你的分支,在Git术语中,现在是dev
分支后面的一个提交。这意味着您不能简单地合并两个分支:您必须使用dev
分支使您的auth
分支更新。这可以通过git merge
完成!
将auth
分支与dev
分支或dev
分支与master
分支合并是很简单的并且按照你的期望进行,但是相反地合并它有自己的特性,乍一看并不直观。我可以喋喋不休,或者我可以向您展示另一个很好的图表,如果您此时合并dev
分支与auth
分支会发生什么:
--- Commit 5 ----------- auth branch
/ /
--- Commit 4 -------------- dev branch
/
--- Commit 1 ---- Commit 2 ---- Commit 3 -------------------------------- master branch
看看我在那里做了什么?查看图表一秒钟,并在继续之前尝试了解这里发生的事情。您基本上是对auth
分支进行了另一次提交,其中包含了dev
分支中的提交。但那没关系,对吧?毕竟,在一天结束时,我想让我的auth
分支与dev
分支最新,现在它_是_最新的?是的。但是,让我向您展示一个图表,以明确说明其他图表所暗示的内容:您的auth
分支现在看起来像这样:
--- Commit 5 ------- Commit 4 ------- auth branch
/ /
------ Commit 4 --- --------------------- dev branch
现在看?您_复制_了提交。如果你现在要合并到dev
分支,它看起来像这样:
--- Commit 5 ------- Commit 4 -------------------------------------- auth branch
/ / \
------- Commit 4 ----------------------- Commit 5 ---- Commit 4 -------- dev branch
你合并了两次相同的提交!这当然对你的代码本身没有任何影响,但是如果你有一个好日子决定查看你的git logs
,你会立即意识到你的git历史是多么脏,一些提交一遍又一遍。如果您想恢复提交,则很难确定要还原到哪个提交。
您最好使用Git-Rebase 。