管理员告诉我在将它们推送到远程之前不要将develop合并到我的分支中,并且我应该基于master创建新的分支,这样开发的代码就不会意外地合并到master中。好的,这已经好几个星期了,但是几天前我偶然合并了我的一个分支机构。这对管理员来说没有造成大问题,他只是告诉我不要再这样做,但从那以后我开始使用“git branch --contains”来确保。
问题: 当我获取远程主控并运行“git branch --contains”时,它表明develop是其中的一部分:
git branch --contains
develop
* master
怎么可能?
我看到3种可能的解释:
git fetch
git checkout master
git reset --hard origin/master
git clean -f
git pull origin master
因此只要开发是在master中我就无法创建/推送任何新的分支。
知道发生了什么事吗?
答案 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