我的git分支在Sourcetree中显示为'origin/master'和'origin/HEAD',我不知道如何合并两个分支。

19
我最近将我正在工作的一个分支与'master'分支合并了。当推送或拉取时,我可能做了一些事情,创建了一个origin/master和一个origin/HEAD分支(还是git的新手)。不幸的是,我没有记录下我运行这些命令的记录。目前,我的团队在他们的主副本中有很多代码,但我在检出项目时却没有得到(即使我在新位置上进行clone)。以下是Sourcetree显示的截图:

2 branches

我真的需要解决这个问题,这样我才能继续工作,所以任何帮助都将不胜感激。


这不是你需要担心的事情。我在我的一些存储库中也有它,但它只是一个指向origin/master的指针。如果你执行git branch -r,你应该能看到它。 - Shahbaz
嗯...你们有什么想法,为什么我的主机与我的队友的主机不同步? - Zachary Abresch
当然,由于你有不同的代码库,你需要将它们同步。所以,你的问题实际上是“如何将你的工作与origin合并”? - Shahbaz
2个回答

16

它只是一个指向主分支的指针,如果您愿意,可以理解为符号链接。您可以在终端(或Windows用户的git bash/cygwin)中执行以下操作来安全删除它:

  1. 导航到您的存储库
  2. 执行:git remote set-head origin -d

现在它应该已经被删除了:

$ git branch -r
origin/master

8
你看到的以origin/开头的分支称为“远程跟踪分支”。它们告诉你Git最后一次从名称为origin的仓库中获取这些分支时它们所处的位置。
这其实是有帮助的信息,不需要担心。如果你认为这些分支的位置已经过期,可以运行以下命令:
git fetch origin

...以便更新它们。

在任何仓库中,HEAD是一种特殊的引用(称为“符号引用”),表示当前分支(或如果您没有处于特定分支上,则表示当前提交)。


从图中可以看出,您的master分支实际上领先于origin/master一个提交,因此如果您的同事已经将代码推送到了origin中的master,并且您最近运行了git fetch origin(或等效命令),那么您已经拥有他们的所有工作。 但是,在您推送该提交之前,他们将无法获得您的提交。

您说:

目前,我的团队在他们的主分支副本中有大量代码,但当我检出项目时(即使我克隆到新位置),我却无法获取这些代码。

如果是这种情况,他们可能正在推送到不同的分支、不同的仓库或根本没有推送他们的工作。


还可以使用 git merge origin/<some_branch> 命令将 <some_branch> 分支与当前所在的分支合并。这样,不仅可以更新您本地的 origin 分支,而且还可以获取本地分支中的更改。 - Shahbaz
1
我没有提到这个,因为在 OP 的情况下合并 origin/master 不会有任何作用 - 他的 master 分支比 origin/master领先 - Mark Longair
是的,我只是为了让答案更完整而这么说。既然他说"目前,我的团队在他们的主副本中有很多代码,当我检出项目时我无法得到这些代码",你建议他运行git fetch,我提到之后应该运行git merge - Shahbaz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接