在GIT中更改旧提交

时间:2014-05-23 11:40:46

标签: git

通过从某个地方复制代码,已经完成了一项重大更改(包括许多文件的更改以及文件的添加和删除),并且已经完成了很多工作,包括来自其他分支的许多合并。现在我们必须知道先前复制了错误版本的代码。

有没有办法可以通过立即复制正确版本的代码来改变提交?

我看了一下this,但这是一个线性历史。我还看了this,但示例仅用于添加新文件。

在我的情况下,我确定在更改旧提交后会出现冲突。我也可以添加新提交而不是更改现有提交。

2 个答案:

答案 0 :(得分:2)

我同意websterridge,修改历史可能不是可行的方法;只有你想要永久删除旧提交的所有痕迹(并且有一系列问题)才有意义。

最好的解决方案可能是创建一个具有必要更改的新提交。我们的想法是在已提交的版本和应该使用的版本之间创建差异,并将该差异应用于当前版本。

你可以这样做(未经测试):

  • 在提交错误代码的旧提交之上创建(并签出)分支:git checkout -b fix-branch SHA_OF_OLD_COMMIT
  • 将应该提交的正确版本的代码复制到工作目录中。您可以覆盖错误的文件而不必担心冲突,因为您已经使用原始代码导入返回到旧提交。
  • 承诺:git add --all . ; git commit -m "Fix import of wrong code."

现在你在git中有正确的代码,但在分支" fix-branch"。

您现在可以使用git的工具将正确的代码输入当前分支(让我们说主人):在master之上使用rebase fix-branch,或者将其合并到master中。 在这种情况下,合并可能更好,因为存储库历史记录包含在冲突解决之前导入新的正确代码的原始版本。

无论哪种方式,你可能会遇到很多冲突,但是没有办法解决这个问题。

祝你好运!

答案 1 :(得分:1)

听起来有道理,改变历史是个坏主意,也很复杂。此外,人们已经拥有了他们当前的历史记录。

更好的做法是咬紧牙关并通过新的提交来纠正。