繁体   English   中英

Git中的分离头如何固定

[英]How to fixed the detached head in Git

我有两个远程存储库(我们称它们为 remote1 和 remote2),它们都有一个名为“mainline”的分支。

当我尝试从 remote1 签出“主线”时,我使用“git checkout remote1/mainline”,因为如果我只是“git checkout mainline”,git 会抱怨,因为 remote1 和 remote2 都有“主线”。 但是现在我进入了所谓的detached HEAD模式,并且我已经在detached HEAD模式下进行了一次git commit

在 git 的世界里,我知道我应该在分支上工作,那么有什么办法可以修复分离的 HEAD 模式并在正常的分支模式下工作? (我希望我已经做出的承诺仍然可以保留)。

另一个问题是,如果我有两个存储库,它们都有一个同名的分支,那么在不进入分离 HEAD 模式的情况下,从特定远程签出此分支的推荐方法是什么?

为了让你摆脱目前的状况而不丢失你已经提交的工作,只需检查一个新分支就足够了:

git checkout -b new-branch

现在你有一个本地分支新分支。 顺便说一句,它没有跟踪任何其他分支。 如果您想将此分支关联到远程分支之一,可以使用git branch --set-upstream

git branch --set-upstream remote1/mainline

拥有两个具有相同分支的遥控器应该不会很痛苦......除了必须为某些命令提供一个遥控器......就像从两个远程分支之一创建一个新的本地分支主线,您将必须指定要使用的远程分支:

git checkout -b mainline remote2/mainline

那不是那么痛苦,不是吗?

通常,您通过跟踪“远程跟踪分支”的本地分支与上游分支一起工作。 当您设置并从远程获取时,会出现远程跟踪分支。

在简单的情况下 git 自动创建本地分支并将其设置为在您尝试签出本地不存在但远程存在的分支名称时跟踪远程跟踪分支,但有时您必须手动执行它,因为歧义。

在 git 的世界里,我知道我应该在分支上工作,那么有什么办法可以修复分离的 HEAD 模式并在正常的分支模式下工作? (我希望我已经做出的承诺仍然可以保留)。

然后记下你刚刚提交的 id。

git checkout -b remote1mainline remote1/mainline
git merge <commit id>

您现在将拥有一个跟踪 remote1/mainline 的分支“remote1mainline”,您可以像往常一样提交、推送和拉取。

编辑:固定术语。

有问题的三个 git 存储库: localremote1remote2 您不能在本地“签出”远程分支:您必须从中提取。 规范的做法是创建一个分支,然后将其拉下:

$ git checkout master
$ git checkout -b remote1-mainline
Switched to a new branch 'remote1-mainline'
$ git pull remote1:repo mainline

如果您还想拥有remote2的代码,请重复:

$ git checkout master
$ git checkout -b remote2-mainline
Switched to a new branch 'remote2-mainline'
$ git pull remote2:repo mainline

当您分离头部时,git 会打印一条消息,说明如何摆脱它,或者如果这是您的目标,如何创建分支。 在提交之前,这样做。 此时,由于涉及到远程用户,最好将修改后的代码保存在其他地方,核对local存储库,将其克隆回来并重新开始。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM