如何 "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
更早,并且卡在了合并阶段,但这只是一个猜测。
我创建了“分支 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
更早,并且卡在了合并阶段,但这只是一个猜测。