tl;dr
合并提交和--no-ff
没有任何关系git bisect
or git blame
per se.
Mixing public and private历史使得理解不同提交引入的变化变得更加困难。当使用时,这变得非常明显git bisect
and git blame
用于调试。
合并提交和git bisect
正如@torek所说,通过传递强制创建合并提交--no-ff
没有做任何事git bisect
.
真正的问题来自于污染公共历史具有临时提交的存储库 – 有时称为检查站提交——程序员用来在本地跟踪自己的工作。
由于其临时性,这些提交往往是不一致的– 可能会在代码库中引入错误 – 并且文档记录不足。在调试会话中进行这样的提交git bisect
这不是一次愉快的经历;该补丁可能难以解释,或者更糟糕的是,它可能会破坏工作树中的代码。
I think莱纳斯·托瓦尔兹说得最好:
我想要干净的历史,但这实际上意味着(a)干净和(b)历史。
关于“干净”的部分,他接着详细阐述:
保持你自己的历史可读。
有些人通过先在头脑中解决问题来做到这一点,
并且不犯错误。但这是非常罕见的,对于我们其他人来说,
我们在解决问题时使用“git rebase”等。
别暴露你的垃圾。
合并提交和git blame
到那个时刻git blame
, 合并提交do, 实际上,影响您得到的结果.
git blame
总是显示原作者给定的代码行;换句话说谁added到文件中。从 Git 的角度来看,合并提交并不add任何内容到文件,它只是表示存储库目录和文件的快照,这些快照是由两行或多行历史记录组合而成的。除非它是一个邪恶合并, 那是。
这意味着运行git blame
合并文件上将显示每一行的原始作者,无论谁进行了合并提交。
这就是为什么合并提交会让跟踪变得更加困难who做了一个特定的改变并且when。但话说回来,你不应该合并private致力于public无论如何,分支,因为除了原作者之外,它们对其他任何人都没有意义。