git checkout branch显示错误的状态

13 浏览
0 Comments

git checkout branch显示错误的状态

git branch -a显示了以下内容:

* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/feature
  remotes/origin/master
  remotes/origin/origin/feature

我想要切换到最后一个分支remotes/origin/origin/feature

我真的不知道为什么会有remotes/origin/featureremotes/origin/origin/feature,它们是由别人创建的。

文件结构如下所示:

--> F --> G origin/feature

/

A --> B --> C --> D --> E master

现在我想要将remotes/origin/origin/feature合并到master分支。

奇怪的是,如果我想要使用以下命令切换到feature分支:

git checkout 'origin/feature'

所有文件的状态都是在点B而不是点G。我通过gitlab的GUI触发了合并,它告诉我我必须使用以下命令:

git checkout -b 'origin/feature' 'origin/feature'

这样可以正常工作,现在所有文件的状态都是在点G

为什么会这样?为什么即使该分支已经存在,我仍然需要使用-b选项,并且为什么我需要输入两次?

0
0 Comments

问题的原因是在远程仓库中创建了一个名为origin/feature的分支,然后在本地仓库中使用git checkout命令尝试切换到该分支。由于origin/feature在本地仓库中也是一个远程跟踪分支的名称,所以git checkout命令将其解释为一个非分支名称,导致切换到了错误的状态。

解决方法是在远程仓库中将origin/feature分支重命名为一个更有意义的名称,例如feature2。然后在本地仓库中运行git fetch --prune命令,以使本地仓库更新为远程仓库的最新状态,并删除旧的远程跟踪分支名称refs/remotes/origin/origin/feature,并创建基于新分支名称的新远程跟踪分支名称。

谢谢详细的回答。我现在不能说我完全理解了所有的内容,但我对问题有了一个大致的了解。我以后会再回来深入研究一下。

0
0 Comments

git checkout branch shows wrong state这个问题的出现原因是使用了过时的git checkout命令,应该使用git switch命令来代替。另外,如果要强制git checkout将origin/feature视为一个分支名而不是一个文件名,可以使用git checkout origin/feature --命令。

解决这个问题的方法是使用git switch命令来切换分支,而不是使用git checkout命令。或者至少使用git checkout origin/feature --命令来强制git checkout将origin/feature视为一个分支名而不是一个文件名。

另外,为什么即使分支已经存在,我仍然需要使用-b选项,并且为什么需要输入两次分支名呢?因为该分支只存在作为一个远程跟踪分支(记录了最后从名为origin的远程仓库获取的内容)。最好不要在分支名中包含origin/xxx,因为这会造成混淆,因为默认的远程仓库本身就被命名为origin。只需使用git switch origin/feature命令就足够了,因为它有一个猜测模式:

如果没有找到,但确实存在一个远程仓库(称其为)有一个匹配的跟踪分支,将其视为等效于

$ git switch -c --track /

0