2009-01-29 62 views
14

我想在过去的提交中修复一个文件。这可能会影响所有的提交提交。在过去提交git中修改单个文件

有没有简单的方法来做到这一点?你能给我一个如何做的指导方针吗?

很多时候当我提交两次时,我发现我在第一次提交时出错,并且希望修复错误,而不必'重新设置'我的最后一次提交。

澄清。我想更改实际的提交,也就是说,我希望更改过去提交的内容。 IOW我想改变历史!

回答

20

如果你只是想修改倒数第二个承诺(例如,不久前,许多分支和合并,尤其是过了。),然后我用这个方法:

  1. git checkout -b tmp bad-commit
  2. 修复文件
  3. git commit --amend
  4. git rebase tmp master

如果你在两者之间合并,你可能想尝试rebase -i -p,但结果可能会有所不同。

+2

这会改变你的历史。在重新绑定之后,可以从分支的顶端访问的具有正确名称的提交将是固定提交。当你推送时,坏的提交将不会被发送到服务器。 – jpalecek 2009-01-29 22:16:03

5

它看起来像:

你可以在this comment找到rebase interactive的一个例子:然后你可以避开临时分支,但是它又复杂一些。

我也经常为了清理发展历史而进行重组,以便更改正确且分组正确。

一个虚构的例子:
我重命名功能foobar并带有注释说,“改名为富吧”提交。
然后我继续下一个功能或修复,然后进行下一步。
中途,我发现我错过了foo的一个实例!
我承诺我正在进行的工作(或使用git-stash),修复缺少的'foo'并提交该文件,然后使用git-rebase --interactive将所有foo修复合并为一个整洁提交。
如果我没有使用git-stash,那么当我最终完成正在进行的功能时,我将使用git-commit --amend(另一种重新绑定形式)。

当我的补丁被推送审查,所有的作品是正确的,并讲述一个连贯的故事。有时我使用git-rebase --interactive只是为了使相邻的时间分离的变化影响相同的位,以便更改在上下文中。

相关问题