我的团队和我一直使用git大约一年 - 我们都没有任何关于git或任何其他版本控制的经验。我们在dev中完成大部分工作,当我们准备好时,我们创建一个发布分支,在需要时进行任何更改,然后将发布分支合并到master中。在将我们的发布分支合并到master中时,我们一直在进行squash合并以保持提交历史记录清洁。我们已经阅读了很多指南/教程/方法,其中每个人都说了不同的东西,但这是我们决定做的。
我注意到的是,只要我们将发布分支合并到master中,我们总会遇到合并冲突。不是每个文件,但大约15%左右。其中大多数似乎不应该是冲突,但它们显示为一体。这是一个例子:
合并前的主分支:
<div style="float:right">
<strong>Select Report: </strong>
<select name="report" id="report">
<option value="">-- SELECT REPORT --</option>
<optgroup label="General">
<option value="aganalysis_stats"<?php if($report == 'aganalysis_stats') echo " selected"; ?>>AgAnalysis Stats</option>
</optgroup>
<optgroup label="LSPs">
<option value="lsps_pending_approval_for_current_quarter"<?php if($report == 'lsps_pending_approval_for_current_quarter') echo " selected"; ?>>LSPs Pending Approval for Current Quarter</option>
<option value="members_requiring_lsps"<?php if($report == 'members_requiring_lsps') echo " selected"; ?>>Members Requiring LSPs</option>
<option value="missing_lsps_for_current_quarter"<?php if($report == 'missing_lsps_for_current_quarter') echo " selected"; ?>>Missing LSPs for Current Quarter</option>
</optgroup>
<optgroup label="UCCs">
<option value="uccs_by_branch"<?php if($report == 'uccs_by_branch') echo " selected"; ?>>UCCs by Branch</option>
<option value="uccs_eligible_for_renewal"<?php if($report == 'uccs_eligible_for_renewal') echo " selected"; ?>>UCCs Eligible for Renewal</option>
<option value="uccs_expired"<?php if($report == 'uccs_expired') echo " selected"; ?>>Expired UCCs</option>
</optgroup>
</select>
</div>
合并后的主分支:
<div style="float:right">
<strong>Select Report: </strong>
<select name="report" id="report">
<option value="">-- SELECT REPORT --</option>
<optgroup label="Appraisal Requests">
<option value="appraisal_request_stats">Appraisal Request Stats</option>
</optgroup>
<optgroup label="General">
<option value="aganalysis_stats">AgAnalysis Stats</option>
</optgroup>
<optgroup label="LSPs">
<option value="lsps_pending_approval_for_current_quarter">LSPs Pending Approval for Current Quarter</option>
<option value="members_requiring_lsps">Members Requiring LSPs</option>
<option value="missing_lsps_for_current_quarter">Missing LSPs for Current Quarter</option>
</optgroup>
<optgroup label="UCCs">
<<<<<<< HEAD
<option value="uccs_by_branch"<?php if($report == 'uccs_by_branch') echo " selected"; ?>>UCCs by Branch</option>
<option value="uccs_eligible_for_renewal"<?php if($report == 'uccs_eligible_for_renewal') echo " selected"; ?>>UCCs Eligible for Renewal</option>
<option value="uccs_expired"<?php if($report == 'uccs_expired') echo " selected"; ?>>Expired UCCs</option>
=======
<option value="uccs_by_branch">UCCs by Branch</option>
<option value="uccs_eligible_for_renewal">UCCs Eligible for Renewal</option>
<option value="uccs_expired">Expired UCCs</option>
>>>>>>> refs/remotes/origin/dev
</optgroup>
</select>
</div>
如您所见,我对“LSP”和“UCC”选项组进行了完全相同的更改。但是,我只在“UCC”optgroup中发生合并冲突。为什么我会遇到这种合并冲突?我合并错了吗?合并分支到master时我不应该使用squash合并吗?我已经阅读了很多关于变基,壁球提交,没有快进等事情的事情,我不知道什么是对或错。
答案 0 :(得分:0)
让我试着为你解答这些......希望它有所帮助。
为什么我会遇到此合并冲突?
因为git已经发现尝试合并的内容是如此不同以至于它需要您进行干预并告诉它应该在哪些代码。它给你的选项是git在master上的内容(在=======
之上)以及你的分支中的内容(在=======
之下)。
您可以选择其中一个或进行其他更改,保存文件,并使用新消息提交文件(通常类似于“修复合并冲突......”)。
我合并错误吗?
不。 Git刚刚发现了一个无法自动处理的合并,因为它试图合并的两个分支存在巨大差异。
将分支合并到master中时,我不应该使用squash合并吗?
这将根据git用户与git用户的不同而不同,但我通常会尝试在之前将提交压缩到我将分支合并到master中。这通常有帮助,因为那时你正在合并较少的提交,但并不总能解决合并冲突的问题,因为这些在分支不同时会发生。因此,如果master已从触及与分支相同的代码的第三个分支发生更改,则可能仍会发生合并冲突。