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