我有一个git分支,名为9-sign-in-out,代码工作完美,我想把它变成master。我目前在主分支上。

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

我试图切换到9签入-出分支,但它不允许我:

$ 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签入-出分支变成主?也许会重新做人?但是我不想丢失9-sign-in-out分支中的代码。


当前回答

根据git status提示,

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

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

我使用git add来完成合并,然后git签出工作正常。

其他回答

git commit -m "合并的master修正了冲突。"

我的问题是(master|REBASE 1/1)

这个命令对我很管用

 git rebase --skip

根据git status提示,

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

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

我使用git add来完成合并,然后git签出工作正常。

理解这些错误消息的含义是值得的——需要合并和错误:您需要解决当前索引,首先表明合并失败,并且这些文件中存在冲突。如果你已经决定无论你试图做什么合并都是一个坏主意,你可以用以下方法让事情恢复正常:

git reset --merge

但是,否则您应该解决这些合并冲突,如git手册中所述。


一旦您使用任何一种技术处理了这个问题,您就应该能够签出9-sign-in-out分支。正如wRAR的回答所建议的那样,将你的9- login -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

变更分支,丢弃所有本地修改

git checkout -f 9-sign-in-out 

将当前分支重命名为master,丢弃当前master

git branch -M master