git branch包含其他不需要的分支

时间:2013-11-13 19:11:40

标签: git git-fetch

管理员告诉我在将它们推送到远程之前不要将develop合并到我的分支中,并且我应该基于master创建新的分支,这样开发的代码就不会意外地合并到master中。好的,这已经好几个星期了,但是几天前我偶然合并了我的一个分支机构。这对管理员来说没有造成大问题,他只是告诉我不要再这样做,但从那以后我开始使用“git branch --contains”来确保。

问题: 当我获取远程主控并运行“git branch --contains”时,它表明develop是其中的一部分:

git branch --contains
  develop
* master

怎么可能?

我看到3种可能的解释:

  1. 远程主人在某处意外地与开发
  2. 合并
  3. 一些未知错误
  4. 我没有使用提取的主人
  5. 正确更新我的本地分支
    1. 是非常不可能的,因为管理员是一个不可能让这种情况发生的大师
    2. 是我怀疑正在发生的事情
    3. 可能,但我想这几周我一直在用这段代码正确地做到这一点:

    4. git fetch
      git checkout master
      git reset --hard origin/master
      git clean -f
      git pull origin master
      

      因此只要开发是在master中我就无法创建/推送任何新的分支。

      知道发生了什么事吗?

2 个答案:

答案 0 :(得分:1)

自上次提交到develop以来,您的本地master分支可能尚未更新。确保您的本地develop分支是最新的:

git checkout develop
git fetch
git merge --ff-only origin/develop

了解分支拓扑结构的一个好方法是运行此命令:

git log --oneline --decorate --graph --all

或者这个,如果你更像是一个GUI人员:

gitk --all

您将看到一个显示所有提交的图表,其中彩色标记标记了每个本地和远程跟踪分支的位置。当你有很多分支机构和复杂的工作流程时,这是一个跟踪什么地方的好方法。

答案 1 :(得分:0)

问题在于我对git branch --contains的理解。它不会列出当前签出的分支中包含的分支,而是列出包含 it 的分支。

所以要知道master是否包含develop我应该

git checkout develop
git branch --contains
* develop

毕竟没有问题。如图所示,master不是包含develop的分支列表的一部分。

虽然这表明develop确实包含master,但没关系。

git checkout master
git branch --contains
  develop
* master