为什么我不能切换分支?

89
我想在Git中切换分支,但是出现了这个错误信息:
error: you need to resolve your current index first
我在xcode4下使用git。
git status
# On branch DateCode
# Unmerged paths:
#   (use "git reset HEAD <file>..." to unstage)
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#   both modified:      Whereami.xcodeproj/project.xcworkspace/xcuserdatauser.xcuserdatad/UserInterfaceState.xcuserstate
#
no changes added to commit (use "git add" and/or "git commit -a")
Frappuccinos-MacBook-Pro:whereami

未合并的路径:

(使用“git reset HEAD <file>...”取消暂存)

(使用“git add/rm <file>...”标记解决方案)

- lampShade
把以下关于编程的内容从英语翻译成中文。只返回翻译的文本:请编辑您的问题以粘贴该信息,评论中无法阅读。 - Mat
git reset {{currentBranchName}} 然后 git checkout . 将解决你的问题。 - muthukumar selvaraj
这个回答解决了你的问题吗?Git合并错误 - Henke
8个回答

103

如果您不想使用git status中列出的任何合并操作,请尝试以下方法:

git reset --merge

这将重置索引并更新工作树中与<commit>HEAD不同的文件,但保留索引和工作树不同的文件(即具有未添加更改的文件)。

如果在<commit>和索引之间不同的文件具有未暂存的更改,则重置操作将被中止。

了解更多 - https://www.techpurohit.in/list-some-useful-git-commands 和 文档链接 - https://git-scm.com/docs/git-reset


53
如果合并时出现冲突,git status 的输出会显示 both modified。在解决这些冲突之前,git 不允许你切换分支。如果你编辑该文件,你应该能够看到其中的一些冲突标记 - git 手册中有解决这些冲突的指南。(由于 kernel.org 目前无法访问,你可以在这里找到该指南。)另外,如果你认为合并是错误的,你可以使用 git reset --merge 撤销它。

25
如果您不关心git所列出的未完成更改,那么您可以进行强制检出。 git checkout -f {{在此处插入您的分支名称}}

3
这正是我所需要的——我有一个测试分支,其中合并失败了,有很多冲突,我只想丢弃这个分支。我无法返回到一个好的分支(检出失败,并且git reset --merge也失败了)。但是 checkout -f 很好用。 - Chad

6

当我从远程更新新文件时,遇到了这样的消息,并且索引不一致。尝试修复索引,但通过Xcode 4.5、GitHub.app(103)和GitX.app(0.7.1)解决问题失败。因此,我做了以下操作:

git commit -a -m "your commit message here"

这段代码可以绕过Git索引。

两篇博客帮助我理解Git和Xcode:

  • Ray Wenderlich关于Xcode 4.5
  • Oliver Steele的文章(2008年)

  • 6
    您可以使用 HEAD 重置您的分支。
    git reset --hard branch_name
    

    然后获取分支,并从本地删除不在远程的分支。
    git fetch -p 
    

    1

    在切换分支之前,您需要提交或取消保存任何未保存的更改。

    如果这意味着未保存的更改将被删除,Git 将不允许您切换分支。


    错误和 git status 输出表明,这不仅仅是工作树中的更改会在切换分支时丢失 - 它们表明合并失败,并且必须在索引中解决冲突。 - Mark Longair

    1

    由于文件被两个人修改,因此你需要通过

    添加它。
    git add Whereami.xcodeproj/project.xcworkspace/xcuserdatauser.xcuserdatad/UserInterfaceState.xcuserstate
    

    或者,如果您想忽略您的更改,请执行

    git reset HEAD Whereami.xcodeproj/project.xcworkspace/xcuserdatauser.xcuserdatad/UserInterfaceState.xcuserstate
    

    然后只需切换您的分支即可。这应该就可以解决问题了。


    0
    Git 说你的当前分支存在未解决的合并冲突。理想情况下,你应该解决这些合并冲突,然后提交更改。
    但是,如果你真的不在乎当前分支的本地更改(可能你只是在本地尝试了一些东西,但不需要保留它们),你可以忽略并强制切换到其他分支。
    git checkout -f <other-branch-name>
    

    如果您仍希望使用第一个分支(存在合并冲突),但只想获取来自远端的最新版本,可以执行以下操作:

    • 强制删除该分支
    • 重新检出该分支
    # assuming you already switched to another branch
    
    git branch -D <branch-to-reset>
    git fetch
    git checkout <branch-to-reset>
    

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接