如何恢复git提交但保留非常原始的git提交历史记录(在git blame中)

时间:2017-04-27 23:20:02

标签: linux git

我将恢复一个有问题的提交,但是在恢复之后如果我在文件上运行git blame,我看到我的恢复是最近提交触及这些行。这是有道理的,但不是很有用,因为我想看到原始文件的git历史。 (就像有问题的提交和恢复从未发生过一样)。

有办法吗?

谢谢!

4 个答案:

答案 0 :(得分:0)

如果要从分支的历史记录中“删除”提交,则必须: - git checkout上一版本 - 您要保留的要删除的修订后保留的git cherry-pick修订版

假设你想从分支的历史中删除branch-name~3:

const re = /[^\d.]+|^(0{2}|\.)|(0$)|\.(?=\.|.+\.)/; console.log( !re.test("123.342.08") // false , !re.test(".012") // false , !re.test("00.012") // false , !re.test("10.012000") // false , !re.test("0.012") // true , !re.test("10.012") // true , !re.test("123.34208") // true )

瞧。它从来没有发生在一开始。在您的情况下,在采摘樱桃时排除恢复版本并完成。

答案 1 :(得分:0)

恢复与具有反向差异的新提交没有什么不同。所以,不,你不能让float4 main(float2 texCoord : TEXCOORD0) : COLOR0 { // Calculate vector from pixel to light source in screen space. half2 deltaTexCoord = (texCoord - ScreenLightPos.xy); // Divide by number of samples and scale by control factor. deltaTexCoord *= 1.0f / NUM_SAMPLES * Density; // Store initial sample. half3 color = tex2D(frameSampler, texCoord); // Set up illumination decay factor. half illuminationDecay = 1.0f; // Evaluate summation from Equation 3 NUM_SAMPLES iterations. for (int i = 0; i < NUM_SAMPLES; i++) { // Step sample location along ray. texCoord -= deltaTexCoord; // Retrieve sample at new location. half3 sample = tex2D(frameSampler, texCoord); // Apply sample attenuation scale/decay factors. sample *= illuminationDecay * Weight; // Accumulate combined color. color += sample; // Update exponential decay factor. illuminationDecay *= Decay; } // Output final color with a further scale control factor. return float4( color * Exposure, 1); } 忽略原始提交或恢复(除非你愿意改变历史,在这种情况下你实际上根本没有恢复任何东西)。

但是,因为它就像任何其他提交一样,如果你看到最后触及某些行的提交没有用,你可以做任何其他提交的操作,并要求git-blame注释该文件的先前版本。

例如,假设你跑了

git-blame

并且看到了:

$ git blame HEAD -- foo.c

在您感兴趣的行上。您认为此提交无用,因为它是一个还原。您可以使用7507efdad27 foo.c (amalloy) ... 检查该提交还原了哪个提交。

假设产生git show 7507efdad27:然后您可以在提交之前要求查看文件的责备视图:

673bdae7548

这将在恢复提交之前向您显示责任,因此您感兴趣的行将使用最后在提交之前触及它们的提交进行注释。

答案 2 :(得分:0)

从还原的父母那里追究责任,请参阅git blame docs;您甚至可以指定您有兴趣检查的明确提交列表,只需从普通的rev-list输出中删除恢复。

答案 3 :(得分:0)

如果您不想编辑历史记录并且不介意额外提交,您可以通过以下方式执行此操作:

  1. 返回到已还原更改之前的提交。
  2. 创建一个分支,并使用选项 --no-ff(无快进)将您的分支合并到其中

如果你责怪新的分支,你现在应该看到被还原的行的原作者。


请注意,如果您在某个时候将分支合并到 master/main 中,这在理论上应该会自动发生,从而使这变得不必要(假设您永远不会以快进方式合并到 master/main 中)。


如果您从已经合并到 master/main 的旧分支中恢复某些内容,我还没有测试过这些是如何工作的。我最好的猜测是,您需要在没有应该恢复的更改的 master 版本上从第 2 步创建分支。它可能会起作用¯\(ツ)/¯.