【问题标题】:Git: How to check if a local repo is up to date?Git:如何检查本地仓库是否是最新的?
【发布时间】:2011-12-17 19:58:15
【问题描述】:

我想知道我的本地存储库是否是最新的(如果不是,理想情况下,我想查看更改)。

如果不做git fetchgit pull,我怎么能检查这个?

【问题讨论】:

    标签: git git-pull git-fetch


    【解决方案1】:

    试试git fetch --dry-run 手册 (git help fetch) 说:

    --dry-run
    Show what would be done, without making any changes.
    

    【讨论】:

    • 谢谢!不过,从输出中很难理解添加/修改/删除了哪些文件。
    • 您可以查看更新了哪些标签以及各个分支的 start..end 提交范围。如果这还不够,那么将其作为正确的获取(而不是拉取)来执行,这将为您提供正确的、单独的远程本地副本,而不会影响您自己的分支工作。拉动会尝试将两者合并,这不是您想要的。无论您是否 --dry-run,数据传输都是一样的。
    • 为什么当我运行git fetch --dry-run 时没有任何显示?
    • @ParamvirSinghKarwal Git 报告的内容很少。如果无话可说,它什么也不说,就好像什么都没发生一样。也许你是最新的你的常规 fetch 的 refspec。也许添加--all
    • @AaronBeall 如果是这种情况,那么很可能意味着您已经在本地获取了这些更改(因此没有获取任何内容),但尚未将它们合并到您的分支。 git pull 大致相当于git fetch && git merge。如果您在任何时候在没有--dry-run 的情况下运行提取,那么您已经在本地提取了东西。
    【解决方案2】:

    首先使用git remote update,更新您的远程参考。然后你可以做几件事之一,例如:

    1. git status -uno 会告诉你是否正在跟踪的分支 领先、落后或背离。如果它什么也没说,本地和 遥控器是一样的。示例结果:

    在分支DEV上

    您的分支在 'origin/DEV' 之后 7 次提交,并且可以快进。

    (使用“git pull”来更新你的本地分支)

    1. git show-branch *master 将向您显示所有的提交 名称以“master”结尾的分支(例如 master 和 origin/master)。

    如果您将-v 与 git remote update (git remote -v update) 一起使用,您可以看到哪些分支已更新,因此您实际上不需要任何其他命令。

    【讨论】:

    • 为什么这么低? git remote update ; git status -uno 解决了。 git fetch --dry-run 即使在本地落后于远程的情况下也没有输出。
    【解决方案3】:
    git remote show origin
    

    结果:

    HEAD branch: master
      Remote branch:
        master tracked
      Local branch configured for 'git pull':
        master merges with remote master
      Local ref configured for 'git push':
        master pushes to master (local out of date) <-------
    

    【讨论】:

    • 列出了所有时间的分支。如果您有一个历史悠久的存储库,则输出会非常混乱。
    【解决方案4】:

    您可以使用git status -uno 检查您的本地分支是否与原始分支保持同步。

    【讨论】:

    • 它只给出本地状态,不检查远程分支。
    • 只提供本地,但git remote update ; git status -uno 成功了! git fetch --dry-run 在我预期的时候没有输出(而git pull 会拉东西)。
    • 这个答案是错误的,应该删除。事实上,它延续了一个关于 Git 如何工作的非常普遍但错误的神话,只有当/如果有人决定阅读它的 cmets 时,这个神话才会被消除。
    【解决方案5】:

    不是真的 - 但我看不出git fetch 会受到怎样的伤害,因为它不会改变您的任何本地分支机构。

    【讨论】:

    • 我完全同意这一点。 Git pull 可能会破坏、覆盖文件。但是 git fetch 只拉取元数据,允许像 git status 这样的命令告诉你你的本地 repo 是否是最新的,而不覆盖任何文件。它可能无法回答问题的本质,但它回答了问题的精神,为您提供了您想要的工具。 Git fetch,然后 git status 会告诉你本地仓库相对于远程仓库的位置,而不会覆盖文件。
    【解决方案6】:

    您需要发出两个命令:

    1. git 获取来源
    2. git 状态

    【讨论】:

    • 这可行,但问题清楚地表明没有“获取”。在很多情况下,您想知道本地存储库与远程存储库有何不同,而无需实际获取或合并更改。
    • @pedrambashiri 我真的很好奇,比如什么?据我所知,单凭抓取永远不会伤害任何东西。
    • @Prometheus 第一件事,我只是想指出,当一个问题明确指出“没有 fetch”时,如果没有其他方法可以做到这一点,或者没有真正的没有这样做的情况,需要在答案中解释。但是要回答您的问题,获取会更新您的远程存储库的本地副本。看看这篇文章中的图表blog.osteele.com/2008/05/my-git-workflow
    【解决方案7】:

    您必须先运行git fetch,然后才能将本地存储库与远程服务器上的文件进行比较。

    此命令仅更新您的远程跟踪分支,在您调用 git mergegit pull 之前不会影响您的工作树。

    要查看获取后的本地分支和远程跟踪分支之间的差异,您可以使用git diff or git cherry as explained here.

    【讨论】:

      【解决方案8】:

      另一种方法是使用查看远程分支的状态 git show-branch remote/branch 将其用作比较,您可以看到 git show-branch *branch 以查看所有遥控器中的分支以及您的存储库!查看此答案以获取更多信息https://stackoverflow.com/a/3278427/2711378

      【讨论】:

        【解决方案9】:

        如果你使用

        git fetch --dry-run -v <link/to/remote/git/repo>
        

        您会收到关于它是否是最新的反馈。所以基本上,您只需要在之前给出的答案中添加“详细”选项即可。

        【讨论】:

          【解决方案10】:

          如果不使用git fetchgit pull,这是不可能的。如果不去远程存储库查看“最新”甚至意味着什么,您如何知道存储库是否“最新”?

          【讨论】:

          • 请确认!你刚刚回答了你的想法!你应该更加小心,因为新手会摔倒它!
          • @AmanuelNega:这只是基本逻辑。如果您想知道您的本地 repo 是否与远程 repo 处于相同的状态,您需要知道远程 repo 的状态。时期。如果你不知道远程仓库的状态,你不可能知道本地仓库是否处于相同的状态。请注意,最高投票和接受的答案使用git pull,OP 在他的问题中明确禁止。
          • 通知! git status -uno 这行得通,还可以使用git show-branch *master 查看所有主分支的状态!你还说不可能吗?只要您可以访问远程,您就可以看到任何分支的状态!
          • @AmanuelNega: git status 只告诉您本地 refs 的状态,它告诉您本地 refs 是否与远程 refs 保持同步.再说一遍:如果不获取远程仓库的状态,就不可能知道远程仓库的状态是什么。时期。这只是时空的基本规律。
          • 这不是“逻辑上”不可能的,因为不言而喻,一个人可以在你的服务器机房里打电话给某人说,“你的 HEAD 在 master 分支上的哈希是什么”他们可以告诉你然后你可以检查本地并查看您没有该哈希值。现在您知道它们不同步了。
          【解决方案11】:
          git fetch origin
          git status
          

          你会看到类似的结果

          您的分支落后于 'origin/master' 9 次提交

          更新到远程更改

          git pull
           
          

          【讨论】:

          • 请注意您的答案不符合 OP 要求不使用 git fetch 的问题,如果这不可能,您的答案应该在使用它之前解释原因(如果有的话)
          【解决方案12】:
          git remote show origin
          
          
          Enter passphrase for key ....ssh/id_rsa:
          * remote origin
            Fetch URL: git@github.com:mamaque/systems.git
            Push  URL: git@github.com:mamaque/systems.git 
          
            HEAD branch: main
            Remote branch:
              main tracked
             Local ref configured for 'git push':
          

          main pushes to main (up-to-date) 两者都是最新的
          main pushes to main (fast-forwardable) 远程可以用本地更新
          main pushes to main (local out of date) 本地可以更新带遥控器

          【讨论】:

            猜你喜欢
            • 2017-01-18
            • 2012-09-21
            • 1970-01-01
            • 2011-09-03
            • 2020-02-26
            • 2018-04-10
            • 2019-05-07
            • 2015-12-01
            相关资源
            最近更新 更多