Git合并错误


264

我有一个git分支,调用9-sign-in-out它的代码非常完美,我想将其变成master。我目前在master分支上。

$ 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

知道如何忽略所有master分支错误并将9-sign-in-out分支变成master吗?也许git rebase?但是我不想丢失9-sign-in-out分支中的代码。


您是说不想以9次登出的方式丢失未提交的代码吗?
莫维斯·莱德福德

@Mauvis:我已经在分支9登录中提交了我的代码。
2011年

Answers:


531

值得理解这些错误消息的含义- needs mergeerror: you need to resolve your current index first指示合并失败,并且这些文件中存在冲突。如果您决定要合并的内容毕竟不是一个好主意,则可以使用以下方法将情况恢复正常:

git reset --merge

但是,否则,您应该按照git manual中所述解决那些合并冲突。


用任何一种方法处理完该问题后,您都应该可以签出该9-sign-in-out分支。只需重命名的问题你9-sign-in-outmaster,如建议WRAR的回答是,如果你共享你以前的主分支与任何人,这会产生问题对他们来说,因为如果两个分支的历史分歧,你会被改写出版历史。

本质上,您要做的是将主题分支合并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错误:您对以下文件的本地更改将被checkout覆盖:webrat.log请提交您的更改或存储它们,然后才能切换分支。是否以任何方式中止在分支中使用webrat.log并使其与母版合并?
Sayanee 2011年

1
@Sayanee:这是一个不同的错误,它是由不同的情况引起的,如果您对此感到困惑,最好再问一个新的问题。(不过,简而言之,git阻止了您切换分支,因为那样会覆盖。中未提交的更改webrat.log。)
Mark Longair 2011年

我以前只负责整件事,然后重新制作。但这更好。
sudo

43
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
我认为重做合并更干净,如下面的Mark所建议的,而不是强制结帐。
托马斯

8

根据建议git status

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

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

我曾经git add完成合并,然后git checkout工作正常。



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.