2017-06-18 185 views
2

我有我不想讓git去追蹤一個文件夾上的一些文件的時候,所以我將它們添加到該.gitignore像這樣:Git的錯誤:「拒絕失去未跟蹤文件」做合併

Directory/Build/ 

但是當我使用git status時,它們仍然顯示爲「未提交進行提交的修改文件」。我看着這件事,並建議使用清潔的git指數:

git rm --r --cached Directory/Build/ 

我這樣做,以後git status一切,我想有未經跟蹤被顯示爲Deleted: file的文件,我認爲這是不夠好他們將從工作樹中刪除(但我不認爲這是本地的?)。

但是當我試圖做git pull我得到了一些奇怪的合併衝突,我不知道如何解決:

error: refusing to lose untracked file at 'Directory/Build/..../file.class' 
error: refusing to lose untracked file at 'Directory/Build/..../file.jar' 

,也有一些

CONFLICT (modify/delete): ... 
CONFLICT (modify/delete): Directory/Build/..../file.jar deleted in HEAD and modified in <<id>>. Version <<id>> of Directory/Build/..../file.jar left in tree. 

我試着做git merge -Xours但它仍然給了我衝突。

如何解決?

+0

由於[VonC說](https://stackoverflow.com/a/44618504/1256452),你需要獲取文件。 '-Xours'和'-Xtheirs'沒有效果的原因是這些是我所說的「高級別」(commit-wide)衝突,但是這兩個'-X'選項只是指示Git偏好一方或另一方當解決「低級別」(一個文件內部)衝突時。 – torek

回答

0

如果你已經添加了一些文件到Git,他們也跟蹤,如果你把它們寫入你的gitignore。所以你必須先刪除它們。隨着:

git rm --cached files 

然後文件被刪除在你的倉庫,但他們將保持本地。然後你可以把它寫入gitignore,它們將被忽略。

如果您運行註釋,則文件首先顯示爲已刪除,因爲您已完成該操作。因此添加添加並提交更改。那麼它應該工作。之後,你不應該在你的目錄中找到一些新的未跟蹤文件。

2

你仍然需要,在rm --cached -r後,於:

  • 提交這些缺失
  • 移動build文件夾的方式進行(git的回購外):一git status必須表現出一個乾淨的工作樹下一個命令來運行,
  • git pull --rebase(重播您的本地提交的上游分支的頂部)
  • 移動build文件夾回