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

时间:2021-02-10 02:35:34

标签: git branch git-pull pull merge-conflict-resolution

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

1 个答案:

答案 0 :(得分:0)

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

您所说的“未完成的分支”并不是未完成的分支。好吧,关于分支,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,并且卡在了合并阶段,但这只是一个猜测。

相关问题