>管理员告诉我在将它们推送到远程之前不要将 development 合并到我的分支中,并且我应该基于 master 创建新的分支,这样任何来自 development 的代码都不会意外合并到 master 中。好的,这已经工作了几个星期,但是几天前我不小心将开发合并到我的一个分支中。这并没有给管理员带来大问题,他只是告诉我不要再这样做了,但从那时起我开始使用"git branch --contains"来确保。
问题:当我获取远程主站并运行"git 分支 --contains"时,它表明 development 是其中的一部分:
git branch --contains
develop
* master
这怎么可能??
我看到 3 种可能的解释:
- 远程主控在某个时候意外地与开发合并
- 一些未知错误
- 我没有使用提取的主节点正确更新我的本地分支
- 不太可能,因为管理员是一位大师,他不可能让这种情况发生
- 是我怀疑正在发生的事情
- 可能,但我认为这几周我一直在用这段代码正确完成:
git fetch
git checkout master
git reset --hard origin/master
git clean -f
git pull origin master
因此,只要开发在主中,我就无法创建/推送任何新分支。
知道发生了什么吗?
自上次提交以来,您的本地develop
分支可能一直没有更新master
。确保您的本地develop
分支机构是最新的:
git checkout develop
git fetch
git merge --ff-only origin/develop
了解分支拓扑情况的一个好方法是运行以下命令:
git log --oneline --decorate --graph --all
或者这个,如果你更像是一个GUI人:
gitk --all
您将看到一个显示所有提交的图表,其中彩色标记标记了每个本地和远程跟踪分支的位置。当您有很多分支和复杂的工作流程时,这是跟踪内容在哪里的好方法。
问题是我对git branch --contains
的理解。它不列出当前签出分支中包含的分支,而是列出包含它的分支。
所以要知道master
是否包含我应该做的develop
git checkout develop
git branch --contains
* develop
所以毕竟没有问题。如图所示,master
不是包含develop
的分支列表的一部分。
虽然这表明develop
确实含有master
,但这没关系。
git checkout master
git branch --contains
develop
* master