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

70 lines
4.6 KiB
Markdown
Raw Normal View History

---
title: Understand How to Use Git Merge
localeTitle: 了解如何使用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](http://forum.freecodecamp.com/t/how-to-use-git-rebase/13226) 。