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

How to "git pull" leaving unfinished branch

我创建了“分支 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”设置为远程?

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

你所说的“未完成的 b运行ch”并不是未完成的 b运行ch。好吧,Git 根本没有定义 b运行ches 的“完成”或“未完成”,所以也许你可以在这里随意编造任何你喜欢的术语,但是 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的索引处于未合并状态。不幸的是,在这种状态下,您只能做两件事:

  • 完成合并(或选择或恢复:无论是什么导致了冲突),或
  • 完全中止合并(或 cherry-pick 等)。

这意味着你甚至不能离开当前的b运行ch!你的选择是完成合并或不管它是什么(然后提交结果,正如提示所说),或中止正在进行的操作(这会删除你目前的所有决议)。这不是很令人满意,但仅此而已 Git。

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

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

    现在,git worktree 中存在一些错误。有一个特别讨厌的问题直到 Git 2.15 才得到修复。因此,如果您有这些旧版本 Git 之一,我不特别推荐使用 git worktree。如果您确实决定将它与 Git 的这些可疑版本之一一起使用,请尝试在两周内完成所有事情(或者您将对象 p运行e 调整到的任何时间,如果您已经完成那)。但是如果你有 Git 2.15 或更高版本,或者可以确定你可以在一周内完成所有事情,你可以使用 git worktree add 添加一个新的工作树,它将在其他一些 b运行ch——这是添加工作树的基本要求——因为新的工作树有自己的索引,main 索引对于 main work-tree is busy with this conflict resolution no longer a problem.

  • 当然,你的另一个选择是再做一个克隆。

    每个克隆都带有一个完整的存储库、一个索引和一个工作树。新克隆将完全独立于现有克隆,因此您可以在两个克隆中做任何您喜欢的事情。使用不同的 b运行ch 名称甚至没有任何限制。

关于这个:

Do I set "branch A" as remote?

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

注意 git pull 表示 运行 git fetch,然后 运行 第二个 Git 命令 。第二个 Git 命令默认为 git merge 如果你没有为它设置任何其他东西。我猜你 运行 比 git pull 更早,并且卡在了合并阶段,但这只是一个猜测。