为什么不立即提交合并的更改?


16

我的办公室使用Git和SourceTree进行版本控制。之所以如此,是因为当我加入时,版本控制为零,而SourceTree是我曾经使用过的唯一系统。我绝对不是专家,但是我是同事中经验最丰富的人,因此我是事实上的专家,负责教会每个人正确使用Git并纠正他们犯的任何错误。

我正在制作一个教程文档,其中涉及Git和SourceTree,并解释了该过程的每个步骤。在“拉”过程中,“ SourceTree”对话框允许您选择“立即提交合并的更改”选项。我了解它的作用以及为什么有用。我不明白的是为什么会有人希望使用此功能。

有人可以解释为什么您永远不想自动提交合并的更改吗?我试图理解其原因,以便可以更好地解释该功能的用途,并了解将来需要注意的陷阱。

编辑:我不认为我的问题是链接的问题的重复。链接的问题广泛地询问多久提交一次。我在问为什么不选择不使用与在SourceTree中提交合并有关的特定功能。



1
您想要好的理由吗?因为我可以提供各种各样的原因来延迟检查代码,就像我听到人们在野外所说的那样,但是其中很少有很好的理由。
whatsisname

我能想到的唯一原因是由于合并冲突而导致合并失败。但是,无论如何,SourceTree都不会提交。
罗伯特·哈维

附带说明:您为什么要编写自己的教程?bitbucket已经有一个很棒的教程。confluence.atlassian.com/bitbucket/…–
winkbrace

@winkbrace我们不使用Bitbucket;我们将所有内容都保留在本地网络上。我确实参考了Atlassian的出色教程,但是我想让我更简洁一些,可以交给刚接触Git和版本控制的人。它实际上是一个介绍和程序性的过程,“这就是您提交/推/拉/等的方式和原因”,这样人们就可以开始动手了。
David K,

Answers:


26

我不想使用此功能。

没有冲突这一事实实际上意味着,在我的分支中合并的更改与我所做的代码大致不在同一行中。这并不意味着这些更改与我的更改兼容。这并不意味着代码可以编译,也不意味着代码可以工作,或者测试将通过。

换句话说,通过使用此选项,我可能最终会收到伪造的代码提交,这些代码可能未处于良好状态,并且需要修复新的提交。由于我做这个工作,反正,和我永远不会推这种虚假的承诺上游,甚至没有错误(善良禁止,那么有人可能合并到一些其他分支!),我认为没有理由创建此承诺在第一地点。


大概是在创建要素分支,而不是将所有微小更改合并到主分支中。除非在同一功能分支上的同一类上有多个人在工作,否则合并不太可能在功能分支上引起冲突。
罗伯特·哈维

4
@RobertHarvey是的,但是我大概经常将主分支合并到我的分支中。您的评论中有一个隐含的假设,即不同的功能自然会触及不同的类/模块,但并不是每个人都很幸运。不幸的是,您在某个地方拥有上帝的阶级,每个做任何事情的人都需要接触,而您对此无能为力。也有跨领域的功能(由于需要更改每10行代码之一,因此需要升级某些库...)我知道参数“尝试不去那里”,但是如果您已经在那儿呢?安全胜过遗憾。

2

合并后,本地存储库中的文件可能会发生更改。除非您设置“立即提交合并的更改”,否则这些更改不会自动提交给本地。

如果未设置该选项,则文件将以未提交的更改形式出现在SourceTree中。

这是因为除非您明确告知Git,否则Git本身不会提交,并且SourceTree是Git GUI。“立即提交合并的更改” 选项不是一个选项,而是命令快捷方式。

因此,对于其原因想要使用此功能是不言而喻的:要执行提交手动,或根本没有。

假设您将master拖到功能分支。一位同事正在不同的功能分支上。这个同事有打破事物的历史。合并包含此同事对共享通用代码所做的更改。因此,您-与团队其他成员- 请勿提交合并的更改,直到您确定此同事所做的任何更改都不会影响您的工作。

仅仅因为没有充分的理由-从理论上讲-不使用此功能,实际上,可以有许多充分的理由。关于您的教程,我只想说“ 100的99倍,这是您要使用的选项”。我认为您真的不需要详细介绍不使用它的情况,尤其是在其他人对版本控制不熟悉的情况下。这一切都取决于您打算对本教程进行的深入研究。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.