在本地回购的根目录中,我从一个特性分支切换回develop
$ git checkout develop
Switched to branch 'develop'
Your branch is up to date with 'origin/develop'.请注意最后一条信息:您的分支是最新的‘起源/发展’。对我来说,这意味着我的分支完全赶上了HEAD of origin/develop,没有新的变化需要去做。
但当我这么做..。
$ git pull
remote: Counting objects: 10, done.
Unpacking objects: 100% (10/10), done.
From ssh://my-code-commit/v1/repos/myproj
5840bf6..cc91737 develop -> origin/develop
Updating 5840bf6..cc91737
Fast-forward
src/main/java/com/me/myapp/processor/Fizzbuzz.java | 39 +++++++++++++++++++++++++++++++++++++++
src/main/java/com/me/myapp/processor/Foobar.java | 6 ++----
src/main/resources/META-INF/spring/routes/FlimFlam.xml | 21 +++++++++++++++++++++哇哦?!这怎么可能?!如果我的本地develop是“origin/develop的最新版本”,怎么可能会发生远程更改呢?!
这是一个误导的信息,还是我从根本上误解了git说我是最新的意思?
发布于 2018-10-24 01:10:32
通常,您必须考虑三种不同的分支:
你所做的工作通常是在当地的分支机构上完成的。这些是您创建和签出的正常分支。例如,当您执行git branch foo或git checkout -b foo时,您将创建一个本地分支。本地分支是最容易理解的。
现在,当谈到远程存储库时,通常不会直接使用它。因此,相反,它有一些地方政府本身。例如,当您推送到远程master分支时,远程存储库本身就有一个master分支。这是远程存储库中的分支。
当您将存储库作为远程添加到本地存储库时,Git将使用远程分支来表示远程存储库所处的状态。运行git fetch时,Git将从远程获取分支信息并更新其远程分支。远程分支的模式是<remote-name>/<branch-name>。
因此,如果远程存储库origin有一个本地分支master,那么当获取该远程存储库时,您的本地存储库将创建一个远程分支origin/master。该远程分支存在于本地存储库中,并表示远程中的master分支的状态。
现在,当您还有一个本地分支master时,您可以设置该分支来跟踪远程分支。这意味着您将链接master和origin/master,这样推送和拉动就可以准确地知道它们必须与哪个遥控器和哪个分支交互;当您切换到该分支时,它还会给您提供该信息。
但是,重要的是要记住,Git是一个分布式版本控制系统,几乎所有东西都是在本地执行的,在检查本地分支的状态时,只会查看远程分支。它不会自动连接到远程存储库来检查其分支的本地状态。
因此,当Git说“您的分支是最新的‘起源/主’”时,它的意思是“您的本地分支和当前本地存在的远程分支指向相同的提交,但远程分支可能会过时”。要解决这个问题,首先必须运行git fetch来更新本地存储库中的远程分支,以便它们反映远程存储库的新的当前状态。
发布于 2018-10-24 01:18:38
git pull实际上是指git fetch && git merge [upstream],因此,考虑到输出,这意味着在您签出时,您的本地回购以5840bf6为头。这通常发生在您签出一个分支匹配另一个从原产地。
因此,当您进行pull时,您的本地回购更新它的引用,发现合并有新的提交,然后更新到cc91737。
TL;DR:“您的分支是最新的‘起源/发展’。”实际上意思是“你的分公司是最新的‘起源/发展’. AFAIK”
https://stackoverflow.com/questions/52959628
复制相似问题