git - 分支是最新的,但拉取原点仍会导致更改
问题描述
如果我签出我的开发分支并git status
收到消息:
Switched to branch development
Your branch is up to date with origin/development
但是当我这样做时,git pull origin development
它仍然会拉下新的变化。
为什么即使分支是最新的,新的更改也会被拉出?
解决方案
您的分支与起源/开发是最新的
这种说法不能总是可信的。
只是将git status
您的本地副本分支与相应的本地远程跟踪分支进行比较,而不是与驻留在服务器上的原始远程分支进行比较。
尽管本地远程跟踪分支应该与服务器上原始远程分支的状态相匹配,但它们受到一些限制。
仅当使用与网络相关的命令时,才会向前移动远程跟踪分支。
例如:
假设这是服务器上原始远程分支的当前状态。
master
|
A <- B
这是本地工作分支的状态和跟踪服务器上原始主分支的本地远程跟踪。
remote/master
|
A <- B
|
master
现在假设,您做了一些新工作并提交该工作而不将其推送到服务器,所以这就是您的状态
服务器主机
master
|
A <- B
本地主机和本地远程/主机
remote/master
|
A <- B <- C
|
master
如果您git status
现在运行,git 将通过显示您比 master 提前 1 次提交来响应,因为它只是将您的本地 master 分支与您的本地远程/master 跟踪分支进行比较,而不是与服务器上的原始 master 分支进行比较。幸运的是,在这种情况下,远程/主服务器和服务器主服务器的状态完全相同,但情况并非总是如此。
假设在这种情况下,其他开发人员也将东西推送到服务器上相同的原始主分支。
因此,在另一位开发人员的这两个新推送之后,您在服务器上的原始主分支将如下所示,
服务器主机
master
|
A <- B <- D <- E
而且您是本地主分支,本地远程/主分支仍然具有相同的状态,就好像什么都没发生过一样。
remote/master
|
A <- B <- C
|
master
远程/主分支根本没有移动。发生这种情况是因为只有在本地机器上执行任何与网络通信相关的命令时,git 才会将 remote/master 向前移动。由于您的机器没有进行网络调用,因此小远程/主服务器没有机会获取远程服务器主分支的状态,然后更改其状态。哑远程/master 仍然认为它与原始远程服务器 master 分支的状态是最新的。
如果您git status
现在运行,git
仍然会通过显示您仅比 master 提前 1 次提交来响应,我们知道情况并非如此。
你的情况就是这样,
当你被解雇git status
时,git回复了
您的分支与起源/开发是最新的
因为它只是将您的本地开发分支与本地远程/开发分支进行了比较,但与此同时,有人已经将一些更改推送到服务器原始开发分支,因此当您这样做时,git pull
它会将这些更改从服务器带给您并将它们合并到您的当地分支机构。
推荐阅读
- python - 使用 Post 和 requests 登录到使用 python 的 web-scrape 数据
- c++ - glutBitmapCharacter() 给出链接错误 c++
- python - 这个错误试图告诉我什么,我该如何解决?
- sql-server - 从层次结构中删除项目
- html - 如何使用 GridView 上的滚动条固定标题?
- vue.js - 如何在某些路线上隐藏全局组件(例如导航栏)?
- android - 如何向android共享库发送命令
- node.js - 基于 Electron 的应用程序会传递系统范围的 nodejs 环境变量吗?
- python-3.x - 附加由python中的两个函数创建的两个数据框
- pyspark - 汇总表结果中的舍入结果(pyspark)