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

Ela*_*ich 16 git

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

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

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

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

jpa*_*cek 24

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

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

如果您之间有合并,您可能想尝试rebase -i -p,但结果可能会有所不同.

  • 这会改变你的历史.在rebase之后,可以通过正确的名称从分支的提示访问提交.当您推送时,错误提交将不会发送到服务器. (2认同)

Von*_*onC 5

看起来像:

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

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

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

当我的补丁被推送审查时,所有的部分都是正确的,并讲述一个连贯的故事.有时我git-rebase --interactive只是使用相邻的时间分隔的变化来影响相同的位,因此变化是在上下文中.