2011-08-18 63 views
4

這是一個文件,我可能在我的分支中意外更改了一個文件,我已經承諾並重新進行了多次修改。在我將這個分支交給其他人之前,我想讓git忘記我曾經爲這個文件做過任何事情。讓git忘記我對文件做了任何事

如何讓git從master分支(其他人已更新)獲取該文件的最新版本,並忘記我的分支曾經觸及該文件的事實?

回答

1

從主人簽出文件以覆蓋您的更改可能是最容易的。在提交剛簽出的文件後,您可能希望重新分割/壓縮分支以刪除對該文件所做的任何提交。語法結帳是:

git checkout origin/master <path_to_file> 

更高級的選項可能是使用git-filter-branch

3

當你的一個分支,可以從master籤文件:

git checkout master the_file 

提交這一變化然後找到你意外更改文件的提交sha1。並使用

git rebase -i that_sha1 

您會看到分支中的提交列表,從最舊到最新。在第一行(不正確的提交)之後移動最後一行(您剛完成的修復提交)並將pick更改爲fixup。這將和修改不正確的提交具有相同的效果,然後在其上重新提交其餘的提交。

這一切都假定你沒有發佈你的分支。如果你這樣做了,現在也有其他人也有,那你就麻煩了。

+0

這個答案絕對似乎更正確,但肖恩的一個是很多簡單(對於git noob),似乎已經爲我完成了這項工作(git diff --name-only'ing against master does not show the因爲你似乎知道很多Git魔術,你能評論什麼時候(或爲什麼)你的答案是更好的事情嗎? –

+0

如果我正確理解Sean的解決方案,那麼不正確的文件將保留在歷史記錄中,並且您將有一個提交將其更改回正確的版本。這是一個合理的事情,但你說你希望它看起來像你從未對文件做過任何事情。沒有重新綁定或分支過濾,你無法實現這一目標。 – svick

+0

是的..所以我重新... 我做了一個主結賬,並重新與所有以前的承諾,重新設計的分支還記得改變,然後改變該文件? –