持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情
什么是Git Merge,什么是合并冲突?
Git
是一个版本控制系统,可以保存所有文件版本的历史记录。您可以随时返回任何版本并检索旧版本。
假设您创建了一个名为abc.txt
的文件,并将其推送到Git存储库。此时,该文件具有与之关联的当前版本。现在,如果您的同事更改了同一文件并将其推回存储库,则该文件将关联了新版本。
Git Merge
是一项功能,允许您与之前的其他版本保持文件的当前内容同步。这是必不可少的,因为任何人在任何时候都应该处理文件的最新内容,而不要覆盖之前版本的任何更改。
Git merge
可帮助您在将新更改推送到同一文件之前合并来自其他开发人员的更改。
在Git合并的情况下,我们需要注意两件事:
- 更改:文件的两个版本之间发生了什么类型的操作?添加或删除新内容,或更新现有内容。
- 可能性:有两种可能性。更改发生在文件
different regions
,或者更改发生在文件的same region
。同一区域意味着开发人员对文件的同一位置(例如段落、行等)进行了更改。
幸运的是,Git使用auto-merge
策略自动处理大多数这些情况。但是,当更改发生在文件的same region
时,Git不会执行自动合并。相反,它留给您Resolve the Merge Conflicts
。
Git合并冲突:恐怖故事
让我们通过Alex和Tina这两个开发人员的故事来了解上述情况。
美好的一天,
- 亚历克斯将更改从远程存储库拉到他的本地存储库。
- 他更改了名为
abc.txt
的文件,上演了它,提交了它,最后把它推回了远程存储库。 - 与此同时,Tina不知道Alex在
abc.txt
文件中的更改,在文件的same region
进行了一些更改,并试图将其推送到远程存储库。 Git
是一个版本控制系统,所以它警告Tina,她已经更改了比遥控器中的版本更旧的版本(因为Alex的更改已经在遥控器中了)。- 现在,蒂娜需要先从遥控器中提取更改,更新文件,然后再次尝试推送。
- 蒂娜做到了这一点。然而,在她最疯狂的噩梦中,她收到了
auto-merge
失败的警告,所以她现在需要Resolve the merge conflicts
。
这个故事敲响了警钟吗?以上故事与你有关吗?你过去有可能站在蒂娜的立场上。如果没有,你最终会到达那里!因此,让我们了解一下蒂娜必须如何有效地应对这种情况。
如何在Git中解决合并冲突
解决合并冲突并不像听起来那么棘手。在90%的情况下,一旦你清楚地了解了变化,头脑平静,就更容易了。
思考过程
一旦蒂娜拉动更改,蒂娜的本地文件就会有她的更改加上亚历克斯的更改。现在蒂娜可以做以下四件事之一:
- 她可以保留Alex的零零,并删除她的零零。
- 她可以删除Alex的零用,并保留她的零用。
- 她可以保留Alex和她的零用。
- 她可以删除Alex和她的更改。
好吧,但她应该做哪一个?这完全取决于项目的需求和用例。蒂娜会理解incoming
变化,并做任何与情况相关的事情。
那么,incoming
变化是什么?
未完待续