我显然错误地使用Git,所以我希望有人告诉我实际使用它的方式是什么。
基本上,我和同事正在研究同一个项目。我们pull
来自中央存储库,我们每个人都开始研究不同的功能。
在某些时候,我们都必须修改同一个文件,因此当使用完成和push
之一到中央存储库时,冲突就会出现,另一个需要在{{1}之前pull
}}
问题是,每当我的同事push
,我需要push
并合并文件时,最终会破坏整个代码。在这种情况下,什么是正确的git事件流?
答案 0 :(得分:1)
我认为这里没有银弹。如果编辑同一文件,可能会发生冲突。这不是关于你的工作流程,而是事情的运作方式。
现在,您可能会发现通过保持您的功能分支短暂(不会分散太多)以及通过主分支不断追赶(重新定位)来更轻松地处理这种情况。这样,你不必在最后解决大的冲突,而是在整个过程中解决一个小冲突(更容易解决)。
话虽如此,我认为这里的关键是沟通。与您的同事交谈,通常您只需了解其他人正在处理的事情就可以防止冲突,并且可能在您开始编辑可能存在冲突的文件之前等待他们的推动。
答案 1 :(得分:1)
当你说拉断"整个代码"时,你很关心我,但我可以理解 - 你有合并冲突但你并不完全确定如何解决它的最佳方法。
您有一些选择,但在所有这些情况下,与其他开发者的沟通至关重要。您可以修复错误,以便您不会中断,但是冒着打破它们并重复循环的风险。
首先,你已经得到了正确的口头禅 - 如果遥控器有你没有做出的改变,Git会主动拒绝你的推动*,直到你与遥控器达成最新状态。
接下来,确定您正在触摸的文件所做的更改,以及他们是否真正踩到了您的脚趾。可能是您正在使用的方法被重命名,或者以改变您的用例的方式重写。
如果有这样的变化,请与其他开发人员讨论,看看下一个版本是否需要进行这些更改,或者在代码更改稳定并成熟之前推迟。无论哪种变化都可以推迟,在一个单独的分支下提交它们并在发布/稳定后合并该分支是理想的。
如果您需要进行两项更改,现在必须合并。再一次,与其他开发人员交流。你不想意外地合并你们中任何一个曾经工作过的提交。确保合并成功的关键原则是在生成的合并代码上运行两个测试套件**;如果您的测试通过,则合并成功。
一个很好的合并工具(您必须在Google上查找,因为"好" 高度 有争议)将是非常宝贵的。如果您是Mac用户,我的建议是Kaleidoscope;它价格昂贵,但它非常好。如果您正在使用IntelliJ IDEA,其合并工具可以完成工作,但您还必须围绕IDE配置项目。
这里的主要内容应该是与其他开发人员讨论,了解更改的内容以及此版本/迭代/期间所需的内容。
*:您可以强制推送,但除非您知道您正在做什么以及为什么,否则 不 建议你这样做。
**:我认为您的测试编写良好且覆盖良好。请不要忘记这一点,好像有些分支没有被批评,这将使未来的合并成为一场噩梦。
答案 2 :(得分:-2)
正如你所说"在同一个文件上进行更改"。 Git有一个像git Stash这样的特殊命令。当你们两个人在同一个文件上工作而你需要从中央存储库中提取更改时。
您可以通过以下方式临时保存编辑文件的当前状态:
git stash
你回到了原来的工作状态。
然后通过
从中央存储库中取出您的同事更改git pull。
然后它合并而没有冲突。
git stash list
您可以看到具有唯一ID的已创建藏匿列表。
现在您可以通过
申请Stashgit stash apply stash @ {1}。
因此,您的Stashed Changes将应用于更新的存储库。你可以继续从这一点开始工作。