2009-11-18 62 views
1

主支路具有這些文件和文件夾(簡化):git checkout遠程分支顯示無關文件?

C:\Local\TickZoom\Project>ls 
file.txt   name.txt  public 

公共分支正在跟蹤一個供應商庫並一直子樹 合併爲公共文件夾中的主分支的上方。公共具有三個文件夾 僅(簡化):

C:\Local\TickZoom\Project>ls 
platform providers www 

當從公衆交換掌握它行爲正確。

但是,當從主控切換到公共時,會發生奇怪的事情。 它擁有的所有文件和雙方聯合的文件夾:

C:\Local\TickZoom\Project>git checkout public 

C:\Local\TickZoom\Project>ls 
file.txt name.txt public 
platform providers www 

然而,檢查git的狀態是什麼都沒有改變。

我發現'git reset --hard'修復了公衆後退。

CLUE:看來只有在做出新的提交 掌握之後纔會發生這種情況。 git會做某種自動合併嗎?

經過'git reset --hard'後,即使重複,也可以通過結賬方式將 作爲公共工作。

第一次,我認爲它是固定的,但下次改變時我再次發生了 。讓我再試一次 現在確保...

現在,我不能再現它。但它確實發生過兩次。

另一個CLUE是,我第一次做了git reset --hard 它抱怨文件被進程鎖定。

在違規項目關閉後,git reset --hard 成功,然後兩個分支之間的結帳工作。

那麼結賬會被文件鎖定和 「默默」失敗混淆?這會更好,這就是問題 以同樣的方式失敗git reset --hard不僅僅是報告 成功和混亂的工作區。

任何其他智慧或選項設置在git結帳,以避免這種 將不勝感激。

韋恩

+0

好的,現在發現了問題。怎麼修? 問題是在子文件夾中有被忽略的文件。 git正確地完成了結帳,但留下了所有被忽略的文件,並且如果有多個目錄下來,它將留下所有直接去的目錄。 我試過git clean -f,它仍然保留文件。 如何在分支之間切換時清除未被跟蹤的文件? – Wayne 2009-11-18 04:45:54

回答

3

使用該解決

git的清潔-f -d -X

此淘到的,只有你的.gitignore忽略的文件,幷包含所有這些空目錄。

我現在在簽出來自完全不同的存儲庫的分支之前,在腳本中執行此操作。

在同一軟件之間切換分支時,這不是這樣的問題。

Wayne

+1

在您留下來澄清問題的評論中,您問到:「如何在分支之間切換時清除*未跟蹤*文件?」大寫X選項不會清除「未被跟蹤」的文件,它只會清除被忽略的文件。小寫的x選項清除「未被跟蹤的」文件(包括被忽略的文件)。這就是爲什麼我的答案顯示小寫字母x。 :) – 2009-11-21 15:03:19

6

可以使用清潔所有未跟蹤文件:

git clean -dfx 

一定有真的不是你想要讓你運行此命令之前任何未跟蹤文件!

+0

請注意,我發現大寫字母X只會清除被忽略的文件,並且只留下任何未跟蹤的文件 - 這會更安全。小寫字母x將刪除所有被忽略和未記錄的文件 - 正如您所說 - 很危險。所以你的感嘆號是值得的! – Wayne 2009-11-18 05:03:14

+0

這可行,但如果你有環境的東西,如'bower_components','node_modules'或'platforms',它們也會被刪除。如果您從頭開始克隆git,您將會實際得到確切的結果 – Deminetix 2015-08-25 23:37:18