2017-07-03 123 views
2

我正在一個分支上工作,我做了一些提交,在第一次提交時我改變了一個接口來添加一個新方法,然後改變了實現類。git:從舊的提交中刪除文件

我自從在代碼庫中發現了一個現有的方法,它幾乎完成了我想要的操作,所以我想在第一次提交時檢查這些文件。

我只有在之前的提交重置文件之前,所以我不知道如何做到這一點,在過去我檢查了我想從舊的提交中刪除的文件,但創建了一個新的提交,也意味着該文件在坩堝中顯示爲代碼審查的一部分,但沒有任何更改。

有人可以向我解釋如何做到這一點嗎?

回答

1

如果您不希望文件被更改(然後又改回)成爲歷史記錄的一部分,那麼您需要進行歷史重寫。如果提交的提交文件已被推送(並可能與其他開發人員共享),那麼重寫所產生的問題可能會比上面列出的問題更糟糕,而您試圖避免這些問題。

做到這一點的最基本的方法是使用交互式底座。如果你有

... A --- B --- C --- D <--(current_branch) 

其中current_branch是什麼分支你工作,並B被提交在其中添加的方法,你可以說

git rebase -i A current_branch 

(與SHA ID替換A的相應提交)。這帶來了一個帶有TODO列表的文本編輯器,每行代表一個提交。

找到B的命令(它應該是第一行)。如果只有提交中的東西是要恢復的更改,請刪除該行。否則,將行中的第一個單詞從「pick」更改爲「edit」。

然後保存並退出編輯器。現在按照提示進行操作。如果您說要編輯B,您會收到一條提示,告訴您進行更改;所以恢復有問題的文件。如果從B中刪除更改會導致衝突,系統將提示您解決這些衝突。

最終你會得到一個成功的重訂,但重要的是要注意:如果current_branch以前一直推,那麼你現在有

... A --- B --- C --- D <--(origin/current_branch) 
    \ 
     B' --- C' --- D' <--(current_branch) 

當您嘗試推,git會抱怨(因爲更新current_branch會不是快進)。如果您強制推送,則使用該分支的其他人員現在必須從「上游重新分配」中恢復(請參閱git rebase文檔「從上游重新分配中恢復」)。

當我說你需要與其他回購用戶進行協調時,我並不指示你很好;我警告你,如果你不這樣做,並且他們錯誤地處理了最終的恢復過程,你的工作將會被取消。

+0

感謝馬克,我是唯一貢獻這個功能分支的人,我只有4個我自己的提交,並且這些文件只在第一次提交時才更改,因此希望遵循您的指示應該是直截了當的。 – berimbolo

+0

我得到這個通過使用Git的組合復位和互動變基模式git的結帳,同時,然後用git的承諾--amend成功地工作,最後的Git變基--continue。非常感謝您的幫助! – berimbolo