我想在過去的提交中修復一個文件。這可能會影響所有的提交提交。在過去提交git中修改單個文件
有沒有簡單的方法來做到這一點?你能給我一個如何做的指導方針嗎?
很多時候當我提交兩次時,我發現我在第一次提交時出錯,並且希望修復錯誤,而不必'重新設置'我的最後一次提交。
澄清。我想更改實際的提交,也就是說,我希望更改過去提交的內容。 IOW我想改變歷史!
我想在過去的提交中修復一個文件。這可能會影響所有的提交提交。在過去提交git中修改單個文件
有沒有簡單的方法來做到這一點?你能給我一個如何做的指導方針嗎?
很多時候當我提交兩次時,我發現我在第一次提交時出錯,並且希望修復錯誤,而不必'重新設置'我的最後一次提交。
澄清。我想更改實際的提交,也就是說,我希望更改過去提交的內容。 IOW我想改變歷史!
如果你只是想修改倒數第二個承諾(例如,不久前,許多分支和合並,尤其是過了。),然後我用這個方法:
git checkout -b tmp bad-commit
git commit --amend
git rebase tmp master
如果你在兩者之間合併,你可能想嘗試rebase -i -p
,但結果可能會有所不同。
它看起來像:
filter-branch
(複雜的命令可能做你想要的)你可以在this comment找到rebase interactive的一個例子:然後你可以避開臨時分支,但是它又複雜一些。
我也經常爲了清理髮展歷史而進行重組,以便更改正確且分組正確。
一個虛構的例子:
我重命名功能foo
到bar
並帶有註釋說,「改名爲富吧」提交。
然後我繼續下一個功能或修復,然後進行下一步。
中途,我發現我錯過了foo
的一個實例!
我承諾我正在進行的工作(或使用git-stash),修復缺少的'foo'並提交該文件,然後使用git-rebase --interactive
將所有foo
修復合併爲一個整潔提交。
如果我沒有使用git-stash
,那麼當我最終完成正在進行的功能時,我將使用git-commit --amend
(另一種重新綁定形式)。當我的補丁被推送審查,所有的作品是正確的,並講述一個連貫的故事。有時我使用
git-rebase --interactive
只是爲了使相鄰的時間分離的變化影響相同的位,以便更改在上下文中。
這會改變你的歷史。在重新綁定之後,可以從分支的頂端訪問的具有正確名稱的提交將是固定提交。當你推送時,壞的提交將不會被髮送到服務器。 – jpalecek 2009-01-29 22:16:03