如何解决git冲突:不仅仅是代码

git冲突很烦人。 您的代码可以无缝运行,然后将其与另一位队友的代码合并时,所有内容都会分崩离析。

有时,单次编辑会出现大量的多行错误。 有时,无论您做什么, 最终都会在同一个人之间来回跳动git冲突

在生产和商业项目中发生的情况比您预期的要多得多。

多年来,我已经看到足够多的git冲突,以了解它不仅仅是代码。 除了如何划分工作和代码外,这还与团队的流程有关。

团队越大,发生git冲突的机会就越高。 您的代码存储库也是如此。

所以,你可以做什么? 首先,您需要深入研究根本原因 。 这些问题经常以持久的模式出现 。 以下是我在团队空间中遇到的一些模式以及我们如何修复它们。

我最喜欢的分支怎么样

模式1:您不断与同一个人发生git冲突

当您在团队中工作时,拥有明确的工作领域通常可以防止您遇到git冲突。

如果您遇到相同的git冲突,尤其是一遍又一遍地针对相同的文件,这通常意味着您的工作是重叠的。 因此,您所做的任何编辑都会直接影响他人的工作。

那么,如何防止或消除此问题?

首先要做的是观察您的工作范围,并确定您和您的队友应如何抽象出彼此的工作部分

此练习的目的不是让一个人接管另一个人的功能,而是以一种特殊的方式对代码进行模块化,以防止其不断重叠。

git冲突通常是由于抽象不足而引起的,在函数,模块,类和库的套件上没有足够的界限或明确的界限。

模式2:您的团队在同一空间中不断出现git冲突

你们都在同一个项目上工作,无论您做什么,团队中的每个人都在不断遇到git冲突。

这可能是由于分支机构的结构以及您团队的推动工作流程所致。

如果您的团队大于“两个比萨饼”规则(如果您需要订购两个以上的比萨饼,那么您的团队就很大),则协调可能会很困难,尤其是当您都在同一个git分支上工作时。 不建议这样做,但是对于某些工作场所,这就是这样做的方式。

当发生这些类型的冲突时,团队需要做的第一件事就是纠缠您的工作流程。 你怎么做到这一点?

首先,从拥有自己的个人分支开始。

第二步显然将代码域分开 。 这样可以防止您的工作与他人的代码重叠,从而避免发生一系列无休止的git冲突。

您需要做的第三件事是确定提交工作流程。 例如,这可以通过特征commit排序来完成。 或者,可以通过提交管道进行配置。 这意味着在合并并提交到主项目分支之前,需要先检查代码。

提交工作流程

模式3:您与自己的git发生冲突

是。 这可能发生并且确实发生了很多。

与自己产生git冲突的问题通常是由于计算机上的存储库未与当前分支保持最新而引起的 。 或者,它可能是由您的分支机构中的其他人引起的,因此,您的回购可能已过时的原因。

可能在您不期望的地方进行了更改 ,从而导致与您正在处理的文件发生git冲突。

另外,您可能会与自己发生git冲突,可能是因为您在太多分支之间切换,而没有将它们合并到中央分支中。

这个中央分支对于使所有内容正确地流水线并确保您正在处理的存储库包含最新更新是必要的。

在自己的项目上工作时git冲突

如何在代码和合并级别修复git冲突

通常,git冲突的根本原因是因为您的代码推送未简化且仅执行一项任务。

为什么?

因为git本质上是线性的

归根结底,git的目的是让您同时处理多个存储库,但最终将它们全部合并到一个最终分支(在许多情况下是master分支)中。

master分支充当您唯一的真理来源,而与此不同的任何事物都是更新或冲突。

您的主要目的是使其更新而不是冲突。

因此,要做到这一点,您需要对提交进行排序,以适应依赖关系中的更改 -但是有时,冲突会发生,无论如何,尤其是当您从多个开发人员合并回几个分支时。

这里有一些食谱可以帮助您解决合并冲突。

竞争线路变更合并冲突

当对同一组代码进行更改时,就会发生这种情况。 这可以通过删除或修改来实现。 要解决此问题,您需要决定在新提交中保留哪些更改。

当多个开发人员在同一个文件上工作时,经常会出现此问题,因此为什么必须将您的代码域分开,以防止将来再次发生此类问题。

要解决这种合并冲突,请使用git status获取所有冲突文件的列表

为此,您需要手动浏览文件并删除不想保留的内容 。 搜索冲突标记<<<<<<<

基础分支上的更改用<<<<<<< HEAD标记,后跟======= 。 此分隔符充当您的更改与其他人所做的更改之间的分隔,并以>>>>>>>标记为分支名称

确定最终代码的外观并删除所有冲突标记: <<<<<<<,=======,>>>>>>>

完成后,使用git add将更改添加到阶段。

然后使用以下命令正式提交代码 git commit -m“您的提交记录在这里”

删除的文件合并冲突

有时会发生一个人添加文件而另一个人删除文件的情况。

该问题作为未合并的路径问题弹出,其中列出了删除文件的人的文件列表。 该问题可能看起来像这样:

$ git状态

>#在分支主控上

>#您的分支机构和“来源/主管”已经分开,

>#并分别具有1和2个不同的提交。

>#(使用“ git pull”将远程分支合并到您的分支中)

>#您有未合并的路径。

>#(修复冲突并运行“ git commit”)

>#

>#未合并的路径:

>#(适当使用“ git add / rm…”标记分辨率)

>#

>#被我们删除: filenamehere.js

>#

>#没有更改要提交(使用“ git add”和/或“ git commit -a”)

要解决此问题,您需要确定是要保留还是丢弃文件。 如果您想从仓库中永久删除文件,请使用git rm filenamehere.js

如果要保留文件,请使用git add filenamehere.js,它将覆盖删除操作,并将文件保留为提交的一部分。

我们为什么要做这个?

因为此文件可能是提交的依赖项,并且可以防止其他开发人员意外删除

在永久性添加或删除了问题列表中的文件后,请使用git commit -m“您的消息在这里”提交代码

使用git reset

有时,您的代码可能处于意大利面条的状态,您需要将其重置为已知的安全点。

为此,您可以使用git reset回滚您当前所在的仓库

首先,您需要确定要回滚的提交。 为此,请使用git log

注意提交哈希。

然后使用git reset [yourhashcommithere]

按下Enter键后,您的代码将恢复为提交之前的原始状态。 所做的更改将被推送到未分级的空间。

如果您想要一个干净的重置而仓库中没有任何变化,请使用git clean –all

这将为您提供干净的重置,而无需进行任何更改。 如果您想将此回滚提交到您的分支中,则可以将其回滚到原点,但要谨慎行事,并且仅当您要使更改在存储库中永久存在时才可以这样做。


最后的想法

git merge冲突从来都不是一件好事。 他们可能会很烦人-但是这通常是工作的一部分。

无论您走到哪里,都将遇到某种git冲突。 有时,它们是天真无邪的,有时则是未针对模块化代码开发进行优化的团队工作流的指示。

无论如何,我希望本文有助于阐明git merge冲突为何发生以及如何潜在地解决它们。


取得Codota


From: https://blog.codota.com/how-to-resolve-git-conflicts/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值