2009-08-18 58 views
30

如何在不覆蓋數據的情況下git-checkout要在不覆蓋數據的情況下進行git結賬

我跑

git checkout master 

我得到

error: Entry 'forms/answer.php' would be overwritten by merge. Cannot merge. 

這是令人驚訝的,因爲我不知道混帳合併時,我git-checkout。 我一直在命令後單獨運行git merge new-feature。 如果Git在結帳時合併,這似乎顯然是不必要的。

回答

51

Git警告你forms/answers.php在你的工作副本或索引中沒有被提交的變化。

您可以使用git-stash保存更改然後混帳藏匿適用恢復。

git-stash的常見用例是,您正在處理更改,但必須暫時檢出其他分支以進行錯誤修復。所以你可以存儲你的索引和工作副本中的更改,結帳其他分支,使錯誤修復,提交,結帳原始分支,並且git-stash應用以恢復您的更改和提取您離開的位置關閉。

+1

感謝您提及'git-stash'! - 我不知道它的目的是在這種情況下使用。 – 2009-08-18 02:26:35

+2

無論出於何種原因,我無法使用git-stash命令。相反,我不得不使用「git stash」(沒有連字符)。 – 2011-09-14 08:55:28

+0

如果你想要的只是檢查一個不同的修訂版,同時保留你未提交的修改(當找到引入錯誤的版本時有時會出現這種情況),Jakub的建議('git checkout -m')要容易得多。 – 2013-06-09 10:16:01

18

當切換分支(使用git checkout <branch>)時,Git做了未修改的更改的雙向合併,但通常它只進行平凡的(樹級別)合併。

此外git-stashsolution by Karl Voigtland,你可以到git checkout給予額外的選項,選擇下列選項之一:

  • 通知Git 更加努力合併 uncomitted變成分支切換到與-m/--merge選項。使用此選項,當前分支,工作樹內容和新分支之間的三方合併完成,並且您將位於新分支上。

  • 告訴git 覆蓋未完成的更改,使用-f選項丟棄本地更改。警告:未完成的更改將會丟失!

+2

謝謝你。第二個('git checkout -f master')幫我找回來了。我不知道我輸了什麼變化,但它們並不重要,因爲這是我剛想要檢查的一個非常舊的回購副本。 – mgilson 2012-12-12 19:51:01

+0

是否可以執行'git checkout -f'的「相反」操作?基本上我希望Git放棄檢查會導致衝突的文件。 – giusti 2017-07-13 16:35:58

相關問題