Git:究竟是什么导致远程分支更新?

Git:究竟是什么导致远程分支更新?,git,remote-branch,Git,Remote Branch,根据Pro Git 3.5: [remote branches are] local branches that you can’t move; they’re moved automatically whenever you do any network communication. 然而,这在实践中似乎并不正确。我现在的处境是 Your branch is ahead of 'origin/branch-x' by 23 commits. 但我实际上没有做任何提交,只是获取/

根据Pro Git 3.5:

[remote branches are] local branches that you can’t move; they’re moved     
automatically whenever you do any network communication.
然而,这在实践中似乎并不正确。我现在的处境是

 Your branch is ahead of 'origin/branch-x' by 23 commits.
但我实际上没有做任何提交,只是获取/拉取了其他人推送到origin的修改。 如果Pro-Git的语句是正确的,我希望我的远程分支与本地分支相同,因为每次获取或拉取都是与源站的通信


更新远程分支的确切操作是什么?

正如书中所说,每当git执行任何网络操作时,它们都会自动移动。这将包括git fetch、git push和git pull

如果Pro-Git的语句是正确的,我希望我的远程分支与本地分支相同,因为每次获取或拉取都是与源站的通信

我想你对什么是自动移动有点困惑。移动远程分支时,将移动它们以反映远程存储库的当前状态。git fetch或git pull不会更改远程存储库本身,因此远程分支也不会移动


尝试运行git log-oneline-graph-decoration,查看存储库当前状态的漂亮图形。注意分支-x和原点/分支-x在该图中的位置。然后,运行gitpush将更改推送到远程存储库。然后再次运行git log-oneline-graph-decoration;您将看到origin/branch-x已移动。这就是你引用的引文的意思。

就像书中所说的,每当git进行任何网络操作时,它们都会自动移动。这将包括git fetch、git push和git pull

如果Pro-Git的语句是正确的,我希望我的远程分支与本地分支相同,因为每次获取或拉取都是与源站的通信

我想你对什么是自动移动有点困惑。移动远程分支时,将移动它们以反映远程存储库的当前状态。git fetch或git pull不会更改远程存储库本身,因此远程分支也不会移动


尝试运行git log-oneline-graph-decoration,查看存储库当前状态的漂亮图形。注意分支-x和原点/分支-x在该图中的位置。然后,运行gitpush将更改推送到远程存储库。然后再次运行git log-oneline-graph-decoration;您将看到origin/branch-x已移动。这就是您引用的引文的意思。

我怀疑您的问题可能源于git pull在语义上的特殊扭曲-让我们引用git pull手册:

还支持一些快捷符号。 ... 不带冒号的参数相当于:在提取/提取时,它合并到当前分支中,而不将远程分支存储在本地任何位置

这意味着当你

git pull

它依赖于branch..remote和branch..merge(在后一种情况下)配置变量,然后获取远程repo拥有的所有分支,并相应地更新本地存储库中的远程分支

但是,当您执行git pull origin branch-x时,将获取repo origin中branch-x的对象1,本地repo中不会更新远程分支,然后将获取的tip对象合并到当前签出的分支中

因此,要解决您的问题,只需运行git fetch origin并更新远程分支。 您可能需要考虑阅读,以便更好地了解为什么Git拉力不是相当于Git Futc&Plus;git可以在所有可能的情况下合并

另一种修复origin/branch-x远程分支情况的方法是使用git push origin branch-x,假设您的本地分支-x设置为跟踪origin/branch-x-这是因为当您推送跟踪分支时,git知道远程回购中的接收分支现在看起来与您刚才推送的分支完全相同,因此它是正常的更新匹配的远程分支的事件。 如果您对这些概念感到不舒服,远程分支与跟踪分支从阅读开始


1实际上,只有本地存储库中丢失的对象才会被提取。

我怀疑您的问题可能源于git pull在语义上的特殊扭曲-让我们引用git pull手册:

还支持一些快捷符号。 ... 不带冒号的参数相当于:在提取/提取时,它合并到当前分支中,而不将远程分支存储在本地任何位置

这意味着当你

git pull

它依赖于branch..remote和branch..merge(在后一种情况下)配置变量,然后获取远程repo拥有的所有分支,并相应地更新本地存储库中的远程分支

但当你做git pull或 在branch-x中,然后获取repo原点中branch-x的对象1,在本地repo中不更新远程分支,然后将获取的tip对象合并到当前签出的分支中

因此,要解决您的问题,只需运行git fetch origin并更新远程分支。 您可能需要考虑阅读,以便更好地了解为什么Git拉力不是相当于Git Futc&Plus;git可以在所有可能的情况下合并

另一种修复origin/branch-x远程分支情况的方法是使用git push origin branch-x,假设您的本地分支-x设置为跟踪origin/branch-x-这是因为当您推送跟踪分支时,git知道远程回购中的接收分支现在看起来与您刚才推送的分支完全相同,因此它是正常的更新匹配的远程分支的事件。 如果您对这些概念感到不舒服,远程分支与跟踪分支从阅读开始


1实际上,只有本地存储库中丢失的对象才会被提取。

试着运行git log-oneline-graph-decoration。然后运行gitpush并重新运行该命令。也许这会帮你解决问题。也许有人在remote上重写了历史记录?试试这个…克隆这个repo的另一个实例,并在这个新克隆的repo上运行git status…让我们知道它是否仍然给你23个提交消息。试着运行git log-oneline-graph-decoration。然后运行gitpush并重新运行该命令。也许这会帮你解决问题。也许有人在remote上重写了历史记录?试试这个…克隆这个repo的另一个实例,并在这个新克隆的repo上运行git status…如果它仍然给你23个提交消息,请告诉我们。谢谢你的回答。我可能会感到困惑,但并没有达到我期望git fetch或git pull修改远程存储库的程度。据我所知,远程分支是我的存储库的一部分,因此由git fetch或git pull更新,以使它们与远程上的等效分支匹配,这就是自动移动的意思。远程回购中没有任何变化,只有我的本地远程分支。如果我错了,请纠正我。谢谢你的回答。我可能会感到困惑,但并没有达到我期望git fetch或git pull修改远程存储库的程度。据我所知,远程分支是我的存储库的一部分,因此由git fetch或git pull更新,以使它们与远程上的等效分支匹配,这就是自动移动的意思。远程回购中没有任何变化,只有我的本地远程分支。如果我错了,请纠正我。谢谢-这听起来像是可能的解释。我需要研究一下pull手册页才能理解它。我想我误解了ProGit报价自动更新的意思,即远程分支机构总是自动移动到与远程回购相同的位置,而自动化实际上包括它们根本不会移动的可能性。谢谢-这听起来像是可能的解释。我需要研究一下pull手册页才能理解它。我想我误解了ProGit报价自动更新的意思,即远程分支机构总是自动移动到与远程回购相同的位置,而自动化实际上包括它们根本不会移动的可能性。