修改git中过去提交中的单个文件

时间:2009-01-29 21:13:25

标签: git

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

有一种简单的方法吗?你能给我一个指导方针吗?

很多时候,当我提交两次时,我发现我在第一次提交时遇到错误,我希望修复错误,而不必'git reset'我最后一次提交。

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

2 个答案:

答案 0 :(得分:23)

如果你只想修改倒数第二次提交(例如不久前,特别是在很多分支和合并之前),那么我使用这个程序:

  1. git checkout -b tmp bad-commit
  2. 修复文件
  3. git commit --amend
  4. git rebase tmp master
  5. 如果你之间有合并,你可能想尝试rebase -i -p,但结果可能会有所不同。

答案 1 :(得分:5)

看起来像:

您可以在this comment中找到rebase interactive的示例:然后您可以避开临时分支,但同样,它更复杂。

  

我还经常修改以清理开发历史,以便更改正确并正确分组。

     

一个简单的例子:
  我将函数foo重命名为bar并将其提交为“将foo重命名为bar”的注释。
  然后我继续下一个功能或修复,并提交,继续下一个    在那之中,我发现我错过了一个foo的实例!   我正在进行我的工作(或使用git-stash),修复丢失的'foo'并提交,然后使用git-rebase --interactive将所有foo修复程序合并到一个干净的提交中
  如果我没有使用git-stash,那么当我最终完成正在进行的功能时,我将使用git-commit --amend(另一种形式的重新定位)。

     

当推送我的补丁进行审核时,所有部分都是正确的,并讲述一个连贯的故事。有时我只使用git-rebase --interactive来进行相邻的时间分隔的更改,这些更改会影响相同的位,因此更改都在上下文中。