考虑此git历史。如果我签出第二个突出显示的提交(或其上方的所有提交/较新的提交),则它包含一个我可以在屏幕上看到的错误(具体的错误不太相关)。
如果我签出第三个提交(或它下面的任何提交/或更旧的提交,那么我将不再在屏幕上看到错误。
您可以看到,第二个提交包含0个更改的文件,添加了0个内容,定义了0个声明。
然后如何在这两个提交之间切换来引入或消除我要修复的错误!?我不知道两次提交之间正在更改哪些文件?
上面的图片并非完全正确,实际情况如下。我不知道这会在GIT中发生,如果有人可以解释如何在“确保我们总是返回一个整数”的提交中重新引入BUG,那就太好了!
在更新后的图形图像中,您将较新的提交提交给顶部,将较旧的提交提交给底部。一切都被逼成一条整齐的直线。但这是对现实的扭曲视图,就像every]视图被扭曲一样。 (我们可以根据需要介绍爱因斯坦和相对论来证明这一点,但是让我们假设我们喜欢从现在的位置/立场看待事物,而不是无论事物回到原来的位置和状态我们没有今天的观点。明天或明年,我们将有另一个观点!)
让我们以不同的方式重述这段历史,以使事情更加清晰。我们将把较旧的作品放在left
上,将较新的作品放在right上,并像下面这样绘制它:[[parallel:...--o--o---o
\
X--X--X <-- master
/
...--o---X--X <-- feature/buggy
^
|
bug introduced
其中X
表示带有错误的提交。请注意,最下面一行的第一个错误提交是在最上面一行显示的良好提交之后进行的,然后第二个错误提交是与最后一行的最后一个良好提交同时(甚至稍早)进行的。该错误显然是在我标记的位置首次引入的。
现在,如果我们垂直绘制此线性化的图形,并在顶部添加新的提交,则会得到:
.
.
.
X (still has bug introduced by merge)
X (bug first introduced by merge)
o (commit from the top row, not broken)
X (bug in feature/buggy - commit from the bottom row)
X (bug in feature/buggy)
o (commit from the top row, not broken)
.
.
.
在线性化视图中,错误的提交被良好的提交分开。在一次查看历史“一条腿”的“正确”(或至少失真程度较小)视图中,越野车提交全部排成一行。
您在更新后的图形中显示的实际视图具有一个提交,该提交的
log message
表示为Merge remote-tracking branch 'AWS/...
(这被切断),但不是merge commit(一个包含两个的提交)或更多的父母)。这是由git merge --squash
进行的合并,或者在某些Web界面上单击标有“ squash and merge”的按钮。这些提交是通过使用Git的mergemachine进行的,但是没有记录正确的历史记录。1因此,在这种情况下,我唯一的了解是基于苛刻的经验:我已经看到了这种确切的问题之前。我在这里绘制的图形显示了如果合并是常规合并而不是壁球合并,则情况将如何。这里所有这些都不是那么重要,但是您组织中的某人可能应该花一些时间来学习Git在细粒度的层次上的工作方式,以使将来查找和修复错误变得更加容易。1
这通常是故意的:idea是为了掩盖历史,以使将来的调查更加容易,即使实际上,这会使将来的调查更加困难。此“壁球”功能的工作效果取决于使用它的人员的技能和知识。任何人盲目使用它都是错误的,这与任何人在未学会安全使用电动工具的情况下使用电动工具一样,就是错误的用法,即使他们偶然正确地使用了它们。 😀