微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何“git pull”离开未完成的分支

如何解决如何“git pull”离开未完成的分支

我创建了“分支 A”并正在处理它。我向主分支发送了一个拉取请求,但是,我的拉取请求无法合并到主分支中,因为我的代码必须进行更多修改。它留作草稿,等待修复/提交。

现在,我想切换到主分支并处理不同的问题,然后再回到“分支 A”。我切换到主然后

git pull

但是,我收到了

error: Pulling is not possible because you have unmerged files.
hint: Fix them up in the work tree,and then use 'git add/rm <file>'
hint: as appropriate to mark resolution and make a commit.

有什么办法可以让我把目前的工作留在“A 分支”上,然后在主干上工作,然后再回到“A 分支”?我是否将“分支 A”设置为远程?

解决方法

简短的回答是,嗯,不是很短。 ?

您所说的“未完成的分支”并不是未完成的分支。好吧,关于分支,Git 根本没有定义“已完成”或“未完成”,所以也许你可以在这里随意使用你喜欢的术语,但是 if you do that,you won't really be communicating with anyone。但是当你提到你从 Git 得到的确切错误信息时,我们可以知道问题是什么:

error: Pulling is not possible because you have unmerged files.
hint: Fix them up in the work tree,and then use 'git add/rm <file>'
hint: as appropriate to mark resolution and make a commit.

这意味着 Git 的索引处于未合并状态。不幸的是,在这种状态下,您只能做两件事:

  • 完成合并(或挑选或还原:无论导致冲突的原因),或
  • 完全中止合并(或优先选择等)。

这意味着你甚至不能离开当前分支!您的选择是完成合并或任何其他内容(然后提交结果,如提示所述),或中止正在进行的操作(这会删除您迄今为止的所有决议)。这不是很令人满意,但这就是 Git 中的全部内容。

除了……嗯,有两种方法可以解决这个问题。 Git 的索引与您的工作树相关联。

  • 在 Git 2.5 版中,Git 添加了一组新的命令,它们都以 git worktree 开头。这些命令允许您创建与您所在的存储库一起使用的工作树 (git worktree add)。每个添加的工作树都有自己单独的索引,以及自己单独的 { {1}}(以及 Git 内部使用的其他单独项目,例如 Git 用于 HEAD 的引用)。

    现在,git bisect 中存在一些错误。有一个特别讨厌的问题直到 Git 2.15 才被修复。因此,如果您拥有这些旧版本的 Git 之一,我不特别推荐使用 git worktree。如果您确实决定将其与这些可疑版本的 Git 之一一起使用,请尝试在两周内完成所有工作(或者您已调整对象修剪时间的任何时间,如果您已经这样做了)。但是,如果您有 Git 2.15 或更高版本,或者可以确定您可以在一周内完成所有工作,则可以使用 git worktree 添加一个新的工作树,该工作树将位于其他某个分支上——这是基本要求添加的工作树——并且因为新的工作树有自己的索引,事实上 main 工作树的 main 索引正忙于解决这个冲突不再是问题。

  • 当然,您的另一个选择是制作另一个克隆。

    每个克隆都带有一个完整的存储库、一个索引和一个工作树。新的克隆将完全独立于现有的克隆,因此您可以在这两个克隆中执行任何您喜欢的操作。在不同的分支名称上甚至没有任何限制。

关于这个:

我是否将“分支 A”设置为远程?

这个问题没有任何意义,让我担心无论你使用这两个选项中的哪一个,你都应该阅读一些基本的 Git 教程。

请注意,git worktree add 表示运行 git pull,然后运行第二个 Git 命令。如果您尚未为其设置任何其他内容,则第二个 Git 命令默认为 git fetch。我猜您之前运行了 git merge,并且卡在了合并阶段,但这只是一个猜测。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。