2012-03-19 72 views
8

第一次玩git,我不小心添加了所有隱藏的文件和我的提交。現在我已經創建了我的.gitignore,並進行了更改,所有以「〜」結尾的文件仍然存在。在github上刪除主文件

我該如何提交我的本地文件,並刪除那些不應該在那裏的東西?

+0

你的意思是像除了正常的方式做git rm並提交它?你想重寫歷史就像從未發生過的提交? – Kaz 2012-03-19 22:05:42

+0

你可以做到這一點;只需將您的頭重置到提交之前並將其推送到存儲庫即可。回購必須配置允許非快進推。此外,任何從該回購股中撤出的人都必須進行重置以遵循該更改。提交變成垃圾,因爲它未被引用;它會被垃圾收集(在45天之內或類似的東西?) – Kaz 2012-03-19 22:08:07

回答

16

使用git rm --cached FILENAME將其從存儲庫中刪除,但保持該文件的物理位置,並且git add FILENAME將文件添加到存儲庫。你將需要承諾這兩個變化與git commit

+2

我不知道''--cached''標誌。 +1。 :) – 2012-03-19 22:08:06

+0

有什麼辦法可以刪除所有未跟蹤/忽略的文件,所以我不必手動執行此操作? Gedit創建了一個隱藏文件,用於顯示所打開的所有內容。 – danielsvane 2012-03-19 22:13:10

+0

這些文件是否遍佈在您的目錄結構中?如果沒有,使用一些像tortoisegit這樣的GUI工具來輕鬆地做到這一點。 – Shocker 2012-03-19 22:16:27

0
Here is a DOS batch file that can help: 

SET count=1 
FOR /F "tokens=*" %%G IN ('dir /s /b *.dll') DO (call :subroutine "%%G") 
FOR /F "tokens=*" %%G IN ('dir /s /b *.pdb') DO (call :subroutine "%%G") 
FOR /F "tokens=*" %%G IN ('dir /s /b *.txt') DO (call :subroutine "%%G") 
FOR /F "tokens=*" %%G IN ('dir /s /b *.cache') DO (call :subroutine "%%G") 
FOR /F "tokens=*" %%G IN ('dir /s /b *.force') DO (call :subroutine "%%G") 
GOTO :eof 

:subroutine 
    git rm --cached %1 
    set /a count+=1 
    GOTO :eof