我已經被這似乎是git的新手常見問題足以抓出恢復。從忘記的.gitignore
我忘了.gitignore一個特定的文件,並將它添加到提交後.gitignore沒有區別。
我找到了this page on gitready,它解釋瞭如何從存儲庫中刪除文件而不從工作樹中刪除文件(通過使用命令git rm --cached <file>
,它工作正常,除非如果我然後嘗試合併到另一個分支,在工作樹中的文件被刪除
重現步驟,在一個空文件夾:
git init
touch want.txt
touch wantnot.txt
git add .
git commit -m "Initial"
git checkout -b BranchForIgnore
git rm --cached wantnot.txt
cat > .gitignore
wantnot.txt [Ctrl-D Ctrl-D here to exit cat]
git add .
git commit -m "Ignoring file"
到這裏,一切都很好
git checkout master
git merge BranchForIgnore
在這一點上,我的wantnot.txt文件不再在我的主人,顯然,簽出BranchForIgnore也無濟於事。
怎麼辦?
謝謝你。鑑於具有相同名稱的文件存在於許多地方,我將如何「從追蹤版本恢復文件」? – Benjol 2009-12-15 08:33:03
當您切換到缺少給定文件的分支時,可以使用例如文件恢復文件。 'git checkout HEAD^-',或者在更一般的情況下,使用'git log -2 --full-history - '來獲得最後一個文件的提交,然後使用'git checkout來恢復文件 - '或'git show :>'。 –
2009-12-15 15:35:58
哇,這是一些嚴重的混帳! – Benjol 2009-12-16 06:58:20