freeCodeCamp/guide/chinese/miscellaneous/understand-how-to-use-git-m.../index.md

4.6 KiB
Raw Blame History

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