2016-05-24 32 views
1

我創建了一個新的分支的Git從一個分支刪除一個文件,把它放在主

git checkout -b mybranch 

然後我刪除它

git rm --cached myfile.txt 

一個文件,但我想保持它在主;爲什麼當我結賬到主

git checkout master 

我得到一個「錯誤:以下未跟蹤工作樹中的文件會被檢出覆蓋:file.txt」,但如果我強迫結賬

git checkout master -f 

的文件從文件系統中刪除?

我確定我錯過了一些東西,但我只是想從分支中刪除文件而不是從主文件中,而似乎git想要在結帳主文件時合併分支。

我使用git rm而不是gitignore的原因是該文件已被提交。

回答

1

如果您想要在master上跟蹤myfile.txt但從mybranch中刪除,那麼您只需刪除它並提交刪除即可。

git checkout -b mybranch 
rm myfile.txt 
git commit -am "delete myfile.txt" 

現在,當您籤主人,你會看到你的文件返回,當你結帳mybranch就會再次消失。

注意:如果您將mybranch合併到master中,它也會在master上被刪除。

+0

謝謝,它的工作原理,但我需要在提交之前添加「git add -u」或使用「git rm」而不是rm 。如果你編輯你的答案,我會接受它。 – Eugenio

+0

@Eugenio感謝您的支持!我編輯了我的回答,使用'git commit -am'來添加所有更改,包括已刪除的文件。 –

0

在交換回主機之前在mybranch上提交更改。

1

git會將該文件視爲未跟蹤,因爲它尚未提交。您必須在切換分支之前提交更改。

因此,您創建了一個分支並對該分支進行了更改。當您嘗試切換回master git會禁止這一點,因爲有尚未提交(或明確忽略的變化;(實際是個什麼untracked手段)

當你強迫籤的文件被恢復的原因(git checkout -f mastermaster是因爲文件master

如果你想這樣做,你必須做到以下幾點

創建,並檢查了分支

git checkout -b somebranch 

somebranch中刪除文件(--cached實際上會從索引中刪除文件,但會將文件保留在文件系統中。見git-rm reference docs

git rm --cached somefile 

提交更改

git commit -m "Remove somefile" 

這將刪除從git的文件,而不是從磁盤,所以現在與git你有一個untracked更改(somefile在磁盤上,但不是在GIT)

如果你希望其他捐助國能夠檢出分支,將其鏈接到遠程

git push --set-upstream origin somebranch 

現在文件從origin/somebranch刪除,而不是master

當您添加文件到.gitignore如果它已經承諾它不會從回購刪除。對該文件的更改將被忽略(所以也將其刪除)。如果你這樣做,你仍然需要刪除文件並提交。之後,git在重新創建時(或文件上的任何其他操作)不會跟蹤文件。

+0

這正是我所做的,我是在「結賬大師」之前提交的。文件沒有恢復(這是我的預期,實際上它們在退出之前仍然在文件系統中),它們在結帳後從文件系統中刪除。 – Eugenio

+0

請勿使用 - 緩存。只要做'git rm somefile',這也會從文件系統中刪除文件。當你重新簽出master時,它應該被恢復。 – Rik

+0

'git rm somefile'實際上和'git rm --cached somefile && rm somefile'一樣。因此,只有將它從索引(緩存)中刪除並將其保留在文件系統上纔是git,就像您將該文件添加到磁盤上一樣,而不是git)。希望通過 – Rik

相關問題