2009-01-29 85 views
14

我想在過去的提交中修復一個文件。這可能會影響所有的提交提交。在過去提交git中修改單個文件

有沒有簡單的方法來做到這一點?你能給我一個如何做的指導方針嗎?

很多時候當我提交兩次時,我發現我在第一次提交時出錯,並且希望修復錯誤,而不必'重新設置'我的最後一次提交。

澄清。我想更改實際的提交,也就是說,我希望更改過去提交的內容。 IOW我想改變歷史!

回答

20

如果你只是想修改倒數第二個承諾(例如,不久前,許多分支和合並,尤其是過了。),然後我用這個方法:

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

如果你在兩者之間合併,你可能想嘗試rebase -i -p,但結果可能會有所不同。

+2

這會改變你的歷史。在重新綁定之後,可以從分支的頂端訪問的具有正確名稱的提交將是固定提交。當你推送時,壞的提交將不會被髮送到服務器。 – jpalecek 2009-01-29 22:16:03

5

它看起來像:

你可以在this comment找到rebase interactive的一個例子:然後你可以避開臨時分支,但是它又複雜一些。

我也經常爲了清理髮展歷史而進行重組,以便更改正確且分組正確。

一個虛構的例子:
我重命名功能foobar並帶有註釋說,「改名爲富吧」提交。
然後我繼續下一個功能或修復,然後進行下一步。
中途,我發現我錯過了foo的一個實例!
我承諾我正在進行的工作(或使用git-stash),修復缺少的'foo'並提交該文件,然後使用git-rebase --interactive將所有foo修復合併爲一個整潔提交。
如果我沒有使用git-stash,那麼當我最終完成正在進行的功能時,我將使用git-commit --amend(另一種重新綁定形式)。

當我的補丁被推送審查,所有的作品是正確的,並講述一個連貫的故事。有時我使用git-rebase --interactive只是爲了使相鄰的時間分離的變化影響相同的位,以便更改在上下文中。

相關問題