【问题标题】:git branch contains other unwanted branchgit 分支包含其他不需要的分支
【发布时间】:2013-11-13 19:11:39
【问题描述】:

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

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

git branch --contains
  develop
* master

这怎么可能??

我看到了 3 种可能的解释:

  1. remote master 在某些时候意外与develop合并
  2. 一些未知错误
  3. 我没有使用获取的 master 正确更新我的本地分支

  1. 不太可能,因为管理员是一位大师,不可能让这种情况发生
  2. 是我怀疑正在发生的事情
  3. 可能,但我认为这几周我一直在用这段代码正确地做到这一点:

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

只要 develop 在 master 中,我就不能创建/推送任何新分支。

知道发生了什么吗?

【问题讨论】:

    标签: git git-fetch


    【解决方案1】:

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

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

    了解分支拓扑的一个好方法是运行以下命令:

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

    或者这个,如果你更喜欢 GUI 人:

    gitk --all
    

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

    【讨论】:

      【解决方案2】:

      问题在于我对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
      

      【讨论】:

      • 如果您还记得 git branch --contains 接受 SHA-1 参数,这将更容易记住:git branch --contains bbfec67 告诉您哪些分支具有该提交。如果没有最后的参数,git branch --contains 表示“将提交 HEAD 解析为 SHA-1 ID,然后找到包含它的分支。”
      猜你喜欢
      • 1970-01-01
      • 2015-04-10
      • 1970-01-01
      • 2017-08-14
      • 2012-07-03
      • 2012-03-05
      • 1970-01-01
      • 1970-01-01
      • 2021-10-08
      相关资源
      最近更新 更多