2013-07-01 159 views
0

這可能之前已經問過,但我似乎無法在其他地方在Stackoverflow或Interweb上找到類似的問題。我正在學習git並試圖圍繞這些概念進行研究。刪除混帳提交併刪除它的所有記錄

我遇到的問題是如何從我的工作目錄或樹中刪除文件或目錄,並刪除其「歷史記錄」。我還沒有開始將文件推送到任何遠程存儲庫。

我開始如下;

  1. 貓> FILE1.TXT
  2. 混帳添加FILE1.TXT
  3. git的承諾-m 「文件1提交」
  4. RM FILE1.TXT
  5. git的狀態顯示我的信息不改變上演對於承諾:刪除:FILE1.TXT

問題

  1. git rm和rm有什麼區別?我的理解是前者在git的歷史記錄中創建刪除記錄
  2. 刪除文件是否總是記錄在git的歷史記錄中?
  3. 如何刪除文件以及提交歷史記錄?
  4. 如果我有多個提交,這會有什麼不同?
  5. 我可以運行什麼問題來刪除提交?

回答

0
  1. rm只是從文件中刪除系統中的文件。如果git正在追蹤它,則需要git rm來阻止它這樣做。

  2. 如果是跟蹤它,是的,刪除它也將成爲該文件的跟蹤歷史的一部分。

  3. 重寫分支的歷史記錄,使其不包含文件的初始提交。就你的情況而言,這與git rebase -i一樣簡單,並將你刪除文件的提交壓縮到你添加它的提交中。

  4. 是的,你需要把它們壓在一起全部在一起。或者,隨着基金會的進展,通過選擇已刪除的修訂版來解決所有衝突。

  5. 與在此期間修改文件的提交有許多潛在的衝突。

+0

當你說跟蹤,我假設你的意思是我已經運行了命令'git add {filename}。如果我還沒有實施它,但已經上演它,它還會被保存在歷史中嗎?我會認爲它不會。你能詳細說明南瓜嗎? 「與修改文件的提交衝突」是什麼意思? – PeanutsMonkey

+0

1.如果您還沒有提交,除索引外沒有跟蹤。你可以用「git rm --cached」來獲取它。 2.壓縮意味着編輯歷史以將兩個提交合併爲一個提交。 3.如果您在提交A中添加了一個文件,並在提交C中將其刪除,然後將它們壓縮在一起,則如果提交B包含對文件的編輯,則會與提交B發生衝突。 –

+0

謝謝。我假設在Commit C中刪除它只會在我對該文件進行更改時纔會發生。如果我在提交A中刪除了該文件會怎麼樣?其次爲什麼我想要將提交合併爲單個提交? – PeanutsMonkey

0

我已經看到了這個最好的導遊之一,是從GitHub

https://help.github.com/articles/remove-sensitive-data

如果更simple方式其上次提交使用變基和力量推動它

git rebase -i 
git push origin +master 

和你的問題。

  1. rm是一個系統「刪除」命令。 Git的RM涉及到內部處理。如果你從硬盤中刪除一個文件,Git將擁有它的一個副本,並且能夠恢復它。

  2. 所有更改(如果提交)記錄在gits歷史記錄中。如果你犯了一個文件,然後將其刪除不commiting到混帳,混帳完全不認識它,因此沒有記錄

  3. 上面的鏈接已經從所有的刪除文件信息提交

  4. 同上

  5. 如果有人正在使用它或從你刪除的提交分支,git將努力合併更改。通常很少有情況下,你實際上需要刪除git

+0

謝謝。我什麼時候可以使用'git rebase -i HEAD〜{number}? – PeanutsMonkey

+0

當你有超過1個提交你想要擺脫。數量是你想要合併多少個提交到1 – exussum

+0

對不起,作爲一個新手,我想結合我的提交什麼? – PeanutsMonkey