2011-09-27 240 views
1

我是一個git新手,並在前些天剛開始使用它。這個想法看起來不錯,但我已經遇到了一個問題,使得git看起來更像是一件麻煩事,而不是它的價值。Git - 無法更改分支

我在做什麼:

我開始將其添加到我的項目之一,我創建了3個分支:

  • 穩定
  • 阿爾法

一切似乎很好。截至今天,Master和Stable的代碼非常相似。我正在研究Alpha,其中包含一些新功能的開始。

出了什麼問題:

我想完成的bug測試穩定分支,這樣我就可以發佈一個更新的iOS應用。我不小心改成了master分支(這是我計劃用於發佈版本的分支),然後想要更改爲stable分支。然而,在試圖改變我收到錯誤:

"you need to resolve your current index first" 

和分支拒絕改變。顯然,這是一個糟糕的合併,雖然我什至不記得合併任何東西,除了可能是我設置git時的幾行代碼。以下爲「git的狀態」輸出:

# On branch master 
# Unmerged paths: 
# (use "git reset HEAD <file>..." to unstage) 
# (use "git add/rm <file>..." as appropriate to mark resolution) 
# 
# both modified:  Schedule.xcodeproj/project.xcworkspace/xcuserdata/Jordan.xcuserdatad/UserInterfaceState.xcuserstate 
# 

我使用的Xcode 4,並使用內置的存儲庫管理切換分支/管理混帳等

那麼,什麼地方出了錯?爲什麼git會給我錯誤,儘管我從來沒有真正地將很多(或任何東西)合併 - 我怎樣才能修復它,並避免將來發生?

+0

這似乎有點類似於http://stackoverflow.com/questions/6002732/why-can-i-not-switch-branches – VonC

+0

即使你沒有明確做一個合併,你做'git拉「在任何階段? (Pulling是獲取和合並的捷徑。)或者是櫻桃選擇或rebase,兩者都使用合併機制? –

+0

啊,我做了一個拉...只是試驗看什麼做了什麼。這解釋了它。 –

回答

2

修正了:

git reset HEAD <file name of the file stopping merge> 

從加入忽略和屬性一些的再次發生停止。xcodeproj軟件包文件:

.gitignore 

# xcode noise 
build/* 
*.pbxuser 
*.mode1v3 
*.xcuserstate 

# old skool 
.svn 

# osx noise 
.DS_Store 
profile 

.gitattributes 

*.pbxproj -crlf -diff -merge 
0

如果你不關心Schedule.xcodeproj/project.xcworkspace/xcuserdata/Jordan.xcuserdatad/UserInterfaceState.xcuserstate,我可能不會這麼做,最簡單的方法是首先運行git stash

正如Stephen(下)指出的那樣,這不是一個理想的方法。另一種方法(這可能不會被一些人喜歡)是從資源庫中刪除該文件,並提交該更改:

git rm -f --cached Schedule.xcodeproj/project.xcworkspace/xcuserdata/Jordan.xcuserdatad/UserInterfaceState.xcuser 
git commit 

--cached標誌保持它從越來越刪除掉你的硬盤,以及-f標誌是必需的,因爲它已被「修改」(即使你認爲它沒有)。

爲了避免將來出現類似問題,我會將該文件以及所有其他用戶特定文件添加到.gitignore文件中。

+2

'git stash'用於臨時保存你不想提交_yet_的東西。他或者需要解決衝突或者回滾。 –

0

這是因爲您在本地修改了文件。 在這個階段,你必須提交這些文件,或者你必須重置它們。如果你想不想犯他們,那麼:

$ git reset HEAD file path

重置文件以後,就可以結帳他們爲:

$ git checkout file path

注意:通過這樣做,你的本地修改會迷路了。