我想在过去的提交中修复一个文件.这可能会影响所有提升提交.
有一个简单的方法吗?你能给我一个如何做到这一点的指导方针吗?
很多次,当我提交两次时,我发现我在第一次提交时遇到错误,我希望修复错误而不必'git reset'我最后一次提交.
为了澄清.我想更改实际的提交,也就是说,我希望更改过去提交的内容.我想改变历史!
如果你只想修改倒数第二次提交(例如,不久前,特别是在很多分支和合并之前),那么我使用这个过程:
git checkout -b tmp bad-commit
修复文件
git commit --amend
git rebase tmp master
如果您之间有合并,您可能想尝试rebase -i -p
,但结果可能会有所不同.
看起来像:
a filter-branch
(可以做你想要的复杂命令)
并按照jpalecek的描述进行修改和修改.您将在此其他相关问题中找到稍微更详细的相同解决方案.
您可以在此注释中找到rebase interactive的示例:然后您可以避开临时分支,但同样,它更复杂.
我还经常修改以清理开发历史,以便更改正确并正确分组.
一个简单的例子:
我将函数重命名foo
为bar
并使用注释"将foo重命名为bar"进行提交.
然后我继续下一个功能或修复,并提交,继续下一个.
中途,我发现我错过了一个实例foo
!
我提交我的工作(或使用git-stash),修复丢失的'foo'并提交,然后使用git-rebase --interactive
将所有foo
修复合并到一个干净的提交中.
如果我没有使用git-stash
,那么git-commit --amend
当我最终完成正在进行的功能时,我将使用(另一种形式的变基).当我的补丁被推送审查时,所有的部分都是正确的,并讲述一个连贯的故事.有时我
git-rebase --interactive
只是使用相邻的时间分隔的变化来影响相同的位,因此变化是在上下文中.