我们的开发分支发生了一些事情,以至于发布分支中的很多代码都被合并到其中。我试图追踪这些变化发生在哪里,但我得到了一些非常令人费解的结果。当我运行git diff HEAD@{2}
它时,它会显示一个更改列表,其中包括许多几个月内未触及的文件,这意味着HEAD@{2}
在我看来,这是带来了错误代码的提交。但是,如果我运行git show HEAD@{2}
它会显示一个相当无害的提交,它只涉及两个文件。此外,当我运行git reset --hard HEAD@{2}
它时,它似乎解决了问题并在我尝试了两次重置然后用git reset --hard origin/dev
它撤消它之后消除了所有奇怪之处,现在看来,所有额外代码的提交都在HEAD@{1}
.
我似乎无法对此做出正面或反面,因此欢迎任何建议/指针/提示或技巧,但一些令我困惑的直接问题是:如果没有合并,这段代码如何进入分支犯罪?如果有人从生产分支中挑选了一个提交到开发分支,这可能与此有关吗?如何git show
和git diff
解决提交有什么区别(如果有的话)?
我给出的当前理论是有限的 git 知识:似乎这些更改不是任何提交的一部分,而是以某种方式进入了树中,HEAD@{2}
因此diff
在它遍历对象树时显示了更改,但show
没有看到它们,因为它们不是一部分的一次提交。这有任何意义还是我离谱?
无论哪种方式,感谢您提供的任何帮助!