2016-02-10 51 views
0

我使用git,但有很多要學習。我想保存對文件的一些更改(但不提交)並轉到其他分支,查看一些代碼,然後返回到我正在處理的內容。就這樣。所以,我沒有卡住藏在git中

> git stash 
> git checkout 
> vi .... 
> git stash apply [email protected]{0} 

,發現自己面臨着一個錯誤信息

Auto-merging schematic.f 
CONFLICT (content): Merge conflict in schematic.f 

我顯然沒有意識到藏匿如何適用是去上班。現在我被卡住了。我所能想到的任何事情都會讓我離開當前的分支,回到我工作的那個分支。我一遍又一遍地收到同樣的錯誤消息。我如何擺脫這個困境?謝謝。

回答

2

幸運的是,apply意味着嘗試在我目前的工作樹藏匿,但保持存儲,使存儲本身完全完好無損。並且,根據你的命令序列(假設vi ...只是爲了看一些東西,而不是改變它),你的stash然後checkout本應該留給你一個乾淨的工作樹在當前的提交,所以你所有做的是迫使工作樹以匹配當前犯,有:

git reset --hard HEAD 

(注意:git reset --hard擦去到工作樹所做的任何更改,以便確保所有的變化也有隻是做那些git stash apply:例如,您可能首先檢查git statusgit diff,以確保雙重確定)。

一旦工作樹是乾淨再次,你可以git checkout想上,git stash apply變化藏匿的分支,如果一切順利,它git stash drop


我總是建議git stash apply而不是git stash pop這個原因,儘管在事實上,pop只有當它應用於乾淨,這樣的區分是非常小滴的藏匿處。

+0

唷!這工作!謝謝。將在幾分鐘內接受你的答案,當stackoverflow讓我。一般來說,如果我合併,看到衝突,並且想「哦,哦,我還沒有準備好合並,」這是退出的方式嗎?謝謝。 –

+1

@ bob.sacamento - 在這種情況下,我會推薦'git merge --abort'。 'git reset --hard'可能有潛在的危險,所以應該小心使用,所以我不會隨便使用它。 –

+1

@DavidDeutsch,@ bob.sacamento:同意,'git merge --abort'是停止以'git merge'開始的合併的正確方法。 (其他命令,包括'git stash apply',使用合併機制,但它們沒有運行「合併」,所以沒有合併中止。) – torek