2011-05-15 78 views
179

我有一個名爲9-sign-in-out的git分支,它具有完美的工作代碼,我想把它變成主控。我目前在主分支上。Git合併錯誤

$ git branch 
9-sign-in-out 
* master 

我想切換到9-sign-in-out分支,但它不會讓我:

$ git checkout 9-sign-in-out 
app/helpers/application_helper.rb: needs merge 
config/routes.rb: needs merge 
error: you need to resolve your current index first 

任何想法,我怎麼能忽略所有的主分支錯誤並打開9-sign-in-out支進大師?也許git rebase?但我不想丟失9-sign-in-out分支中的代碼。

+0

您的意思是說您不想在9點登錄輸入中丟失未完成的代碼? – 2011-05-15 06:09:39

+0

@Mauvis:我已經在分支9號簽入了我的代碼。 – Sayanee 2011-05-19 09:39:22

回答

362

值得理解什麼是這些錯誤消息的意思是 - needs mergeerror: you need to resolve your current index first表明,合併失敗,並有在這些文件衝突。如果你已經決定,無論合併你試圖做的是一個壞主意,畢竟,你可以把事情恢復正常時:

git reset --merge 

但是,否則你應該解決這些合併衝突,as described in the git manual


一旦通過任何一種技術處理,你應該能夠檢出9-sign-in-out分支。如wRAR's answer中所建議的那樣,將9-sign-in-out重命名爲master的問題在於,如果您已將任何人與您之前的主人分支共享過,則會爲他們創建問題,因爲如果兩個分支的歷史發生分歧,重寫歷史。

基本上你想要做的就是將你的主題分支9-sign-in-out合併到master,但確切地保留主題分支中的文件版本。你可以通過以下步驟做到這一點:

# Switch to the topic branch: 
git checkout 9-sign-in-out 

# Create a merge commit, which looks as if it's merging in from master, but is 
# actually discarding everything from the master branch and keeping everything 
# from 9-sign-in-out: 
git merge -s ours master 

# Switch back to the master branch: 
git checkout master 

# Merge the topic branch into master - this should now be a fast-forward 
# that leaves you with master exactly as 9-sign-in-out was: 
git merge 9-sign-in-out 
+1

馬克,我終於明白你說的話後,我再次得到錯誤合併現在。我是,但是有這個錯誤::::::::::::: Sayanee:twitter sweska $ git checkout master 錯誤:您對本地文件的更改將被結帳覆蓋: \t webrat.log 請在您切換分支之前提交您的更改或存儲它們。 中止:::::::::::::::::任何方式,用戶在分支webrat.log並使其與主合併? – Sayanee 2011-05-16 00:32:00

+1

@Sayanee:這是一個不同的錯誤,由不同的情況引起,如果你對此感到困惑,最好問一個新的問題。 (簡而言之,git會阻止你轉換分支,因爲它會覆蓋'webrat.log'中的未提交更改。) – 2011-05-16 07:50:31

+1

太棒了!現在解釋一切:)感謝您的解釋! – Sayanee 2011-05-16 23:31:44

31
git checkout -f 9-sign-in-out # change branch, discarding all local modifications 
git branch -M master # rename the current branch to master, discarding current master 
+3

我認爲它更清潔重置合併像馬克建議下面,而不是強迫結帳。 – Thomas 2011-09-21 12:17:12

0

git status建議,

Unmerged paths:                                 
(use "git add <file>..." to mark resolution)                         

    both modified: a.jl         
    both modified: b.jl 

我以前git add完成合並,然後git checkout工作正常。