0

我遇到了一些难以追踪到底发生了什么的情况。我们有一个“开发”和“主”分支。新的更改从“master”中获取,然后合并到“development”中,然后一旦好我们将新分支合并到“master”中。

在过去几周的某个时候,开发中发生了一系列巨大的变化。我不知道这是怎么发生的,也不知道这怎么可能。无论如何,如果我可以进入文件的历史记录并查看反转它的合并,那就太好了,但它显示的最后一次合并似乎是一年前的。

我能想到的唯一真正的方法是逐个检查提交哈希并将头重置到它们,看看我在哪里。但这似乎不切实际。有更简单的方法吗?

或者有没有办法查看过去的合并,看看哪些文件受到了它的影响?就像当你合并一个分支时,你总是会在控制台中看到哪些文件在哪些行发生了更改。但是在 git 文件历史记录中,大部分内容可能不会显示出来。

还有谁知道为什么会发生这种情况?我已经看到它发生了几次。有时我在合并时会抓住它。就像我将一个新分支合并到另一个分支中一样,我知道我在最后一次提交中只更改了一个文件,但它更改了大量其他文件。Master 分支在大量更新方面落后了大约一年,所以我出于某种原因在考虑,当从 master 创建一个新分支并将其合并到 dev 时,它也会切换所有其他文件。奇怪的是,因为我们总是这样做,而且 99% 的时间只更改更改的文件。我不明白!

4

1 回答 1

1

这里有几个 git 技巧可以帮助你。

首先,git show <commit hash>将向您展示在特定提交中所做的所有更改。git blame <filename>将向您显示一个文件,并逐行告诉您哪些提交更改了该文件。

[添加以回应评论]:

git diff <ref1>...<ref2>将显示两次提交之间的总差异。在合并的情况下这有点奇怪,您可能想要做的是类似于git diff HEAD <merge_parent_1>and的事情git diff HEAD <merge_parent_2>,看看每个分支带来了什么。

最后,如果您有一个已知良好的旧提交(假设您使用 找到了它git show),您可以使用git bisect单步执行二进制搜索来找到出现问题的提交。

于 2012-04-12T17:45:38.943 回答