【问题标题】:Git - Can't change branchGit - 无法更改分支
【发布时间】:2011-11-25 22:14:50
【问题描述】:

我是一个 git 新手,前几天才开始使用它。这个想法看起来不错,但我已经遇到了一个问题,这让 git 看起来比它的价值更麻烦。

我在做什么:

我首先将它添加到我的一个项目中,并创建了 3 个分支:

  • 大师
  • 稳定
  • 阿尔法

一切看起来都很好。到今天为止,Master 和 Stable 几乎是相同的代码。我正在研究 Alpha,其中包含一些新功能的开始。

出了什么问题:

我想完成稳定分支的错误测试,以便发布 iOS 应用的更新。我不小心改到了 master 分支(这是我打算用于发布版本的分支),然后想改到 stable 分支。但是,在尝试更改时,我收到错误:

"you need to resolve your current index first"

分支拒绝改变。显然,这与错误的合并有关......虽然我什至不记得合并任何东西,除了我在设置 git 时可能有几行代码。这是“git status”的输出:

# 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 等。

那么,出了什么问题?为什么 git 给我错误,即使我从来没有真正合并过很多(或任何东西?) - 我该如何解决它,并避免它在未来发生?

【问题讨论】:

  • 即使您没有明确进行合并,您是否在任何阶段都进行过git pull? (拉取是获取和合并的捷径。)或者是cherry-pick或rebase,两者都使用合并机制?
  • 啊我做了一个拉...只是在试验看看什么做了什么。这就解释了。

标签: iphone ios xcode git


【解决方案1】:

这是因为您在本地修改了文件。 在这个阶段,您必须提交这些文件,否则您必须重置它们。如果您不想提交它们,那么:

$ git reset HEAD file path

重置文件后,您可以简单地将它们签出为:

$ git checkout file path

注意:这样做会丢失您的本地更改。

【讨论】:

    【解决方案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
    

    【讨论】:

      【解决方案3】:

      如果您不关心 Schedule.xcodeproj/project.xcworkspace/xcuserdata/Jordan.xcuserdatad/UserInterfaceState.xcuserstate,简单的方法是先运行git stash,我可能不会。

      正如斯蒂芬(下文)指出的那样,这不是一个理想的方法。另一种方法(某些人可能不喜欢)是从存储库中删除文件并提交更改:

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

      --cached 标志可防止它从您的硬盘中删除,-f 标志是必需的,因为它已被“修改”(即使您认为它没有)。

      为了避免将来发生类似问题,我会将此文件以及所有其他用户特定文件添加到 .gitignore 文件中。

      【讨论】:

      • git stash 用于临时保存您不想提交的内容。他要么需要解决冲突,要么回滚。
      猜你喜欢
      • 2020-08-20
      • 2020-12-27
      • 2021-12-12
      • 2014-06-08
      • 1970-01-01
      • 2021-09-03
      • 2017-12-08
      • 2018-07-05
      • 2014-04-27
      相关资源
      最近更新 更多