虽然公认的和最受欢迎的答案是伟大的,我还发现试图用语言来解释区别是有用的:
合并
重基
小结:如果可能的话,重基几乎总是更好的。使重新集成到主分支中变得更容易。
因为➝ 您的特性工作可以作为一个大的“补丁文件”(aka diff)呈现在主分支上,而不必“解释”多个父级:至少两个来自一个合并,但如果有多个合并,则可能更多。与合并不同的是,多个回扣不会相加。(另一大优势)
就我个人而言,我不觉得标准的图表技术很有帮助——箭头似乎总是指向我错误的方向。(它们通常指向每次提交的“父”,最终会在时间上倒退,这很奇怪)。
用语言来解释:
出于我不理解的原因,Git的GUI工具从来没有做出过很多努力来更清晰地呈现合并历史,抽象出各个合并。因此,如果你想要一个“干净的历史”,你需要使用rebase。
我似乎还记得读过只使用rebase的程序员和其他从不使用rebase的程序员的博客文章。
我将尝试用一个简单的例子来解释这一点。假设您项目中的其他人正在处理用户界面,而您正在编写文档。如果没有rebase,您的历史记录可能会如下所示:
Write tutorial
Merge remote-tracking branch 'origin/master' into fixdocs
Bigger buttons
Drop down list
Extend README
Merge remote-tracking branch 'origin/master' into fixdocs
Make window larger
Fix a mistake in howto.md
也就是说,合并和UI提交在留档提交的中间。
如果您将代码重定基址到master上,而不是将其合并,它将如下所示:
Write tutorial
Extend README
Fix a mistake in howto.md
Bigger buttons
Drop down list
Make window larger
所有的提交都在顶部(最新的),然后是master
分支的其余部分。
(免责声明:我是另一个答案中提到的“我讨厌Git的10件事”帖子的作者)
假设最初有3个提交,A
,B
,C
:
然后开发人员Dan创建了提交D
,开发人员Ed创建了提交E
:
显然,这一冲突应该以某种方式解决。为此,有两种方法:
合并:
提交D
和E
仍在这里,但我们创建了合并提交M
,它继承了D
和E
的更改。然而,这创造了钻石形状,这让很多人感到非常困惑。
重新基准:
我们创建commitR
,它的实际文件内容与上面的merge-commitM
相同。但是,我们去掉了commitE
,就像它不存在一样(用点-消失线表示)。由于这种删除,E
应该是开发人员本地的,并且不应该被推送到任何其他存储库。rebase的优点是避免了钻石形状,历史保持直线——大多数开发人员都喜欢这一点!
这两个子句的主要区别是参数传递。对于< code>IFNULL是两个参数,对于< code>COALESCE是多个参数。所以除此之外,这两者之间还有其他区别吗? 它在MS SQL中有何不同?
我知道Shelve不是Git命令,它们都用于搁置未完成的工作。有什么区别?哪一个更灵活?
问题内容: 假设我有两个这样的DataFrame: 我想合并它们,所以我尝试这样的事情: 我很开心 但是我正在尝试使用join方法,我被认为这是非常相似的。 我得到这个: 我想念什么? 问题答案: 我总是在索引上使用: 通过在以下各列上使用,可以具有相同的功能:
IntelliJ支持git存储以及它自己的内置shelve命令。这些似乎在目的和用途上几乎相同。他们之间有什么区别?
问题内容: 两者都意味着空间,但是有什么区别吗? 问题答案: 一个是不间断空间,另一个是常规空间。不间断的空格表示该行不应在该点处换行,就像它不会在一个单词的中间换行一样。 此外,正如斯文德(Svend)在其评论中指出的那样,不间断的空间不会崩溃。
本文向大家介绍<%# %> 和 <% %> 有什么区别?相关面试题,主要包含被问及<%# %> 和 <% %> 有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 答:<%# %>表示绑定的数据源 <%%>是服务器端代码块