【问题标题】:Does "git status" actually check whether upstream repo matches my repo?“git status”是否真的检查上游仓库是否与我的仓库匹配?
【发布时间】:2017-01-18 12:48:19
【问题描述】:

看起来不像

git status

实际上检查我在 github 上的提交是否与我的本地状态完全同步。由于性能问题,这不足为奇。如何强制进行真实检查?

【问题讨论】:

  • 创建一个运行 git fetch 后跟 git ststus 的新别名?
  • 我总是对 git fetch 和 git pull 之间的差异感到困惑......
  • @pitosalas: git pull 只是一个方便的快捷方式,意思是“首先运行git fetch,然后运行其他一些Git 命令,通常是git merge,但如果我提前告诉你,请使用git rebase使用git rebase 而不是git merge"。你怎么知道你是否应该使用rebase vs merge?最好的答案是“先获取,然后检查”——这让git pull 很不方便。因此,除非您已经确定了解变基与合并,否则永远不要使用git pull,只需使用git fetch。然后决定是合并还是变基,然后这样做。

标签: git github


【解决方案1】:

如何强制进行真实检查?

git fetch

由于性能问题,这不足为奇。

实际上,即使是本地检查(在git fetch 之后)有时也可能过于昂贵:
"git status" 可以花费很多周期来计算关系 在当前分支与其上游之间,现在可以 使用“--no-ahead-behind”选项禁用。

参见Jeff Hostetler (jeffhostetler)commit f39a757commit 3ca1897commit fd9b544commit d7d1b49(2018 年 1 月 9 日)。
(由 Junio C Hamano -- gitster -- 合并到 commit 4094e47,2018 年 3 月 8 日)

status:将--[no-]ahead-behind 添加到statuscommit 用于V2 格式。

教“git status”和“git commit”接受“--no-ahead-behind” 和“--ahead-behind”参数来请求快速或完整的前进/后退 报告。

当给出“--no-ahead-behind”时,现有瓷器V2线 “branch.ab +x -y”替换为新的“branch.ab +? -?”行。
这表明分支和它的上游是或不等于 无需计算完整的提前/落后值

status: 支持 --no-ahead-behind 长格式

教导长(正常)状态格式以尊重--no-ahead-behind 参数并跳过可能昂贵的前后计算 在分支和上游之间。

教导“git status --short --branch”尊重“--no-ahead-behind” 跳过计算分支的前/后计数的参数和 它的上游,只报告'[different]'。


Git 2.23(2019 年第三季度)添加了一个新功能:“git status”可以被告知“--[no-]ahead-behind”选项的非标准默认值使用新的配置变量status.aheadBehind。强>

参见Jeff Hostetler (jeffhostetler)commit fb4db1acommit 0a53561commit 06b324c(2019 年 6 月 18 日)。
(由 Junio C Hamano -- gitster -- 合并于 commit 3418622,2019 年 7 月 9 日)

status:添加status.aheadbehind设置

--[no-]ahead-behind 选项是在 fd9b544 中引入的(status:将 --[no-]ahead-behind 添加到状态并提交 V2 格式,2018-01-09,Git v2.17.0-rc0)。
这是 repos 中行为的必要更改,其中远程跟踪分支可以非常快速地移动到本地分支之前。
但是,用户需要记住每次都提供命令行参数。

添加新的“status.aheadBehind”配置设置以更改所有git status 格式的默认行为。

git status documentation 现在包括:

status.aheadBehind:

设置为true 启用--ahead-behindfalse 启用--no-ahead-behind 默认git-status 用于非瓷状态格式。
默认为真。

还有:

statusa/b 计算时间过长时发出警告

在某些情况下,“git status”中的提前/落后计算可能会很慢。
用户可能没有意识到有一些方法可以避免这种计算,尤其是在他们不使用这些信息的情况下。

添加在此计算时间超过两秒时出现的警告。
可以通过新的配置设置advice.statusAheadBehind禁用警告。

这意味着git config advice documentation 现在有:

statusAheadBehind:

git-status 计算本地参考与其远程跟踪参考相比的提前/落后计数时显示,并且该计算花费的时间比预期的要长。
如果status.aheadBehindfalse 或给定选项--no-ahead-behind,则不会出现。

【讨论】:

    【解决方案2】:

    执行git fetch 然后git status 以便检查您的(例如)master 与 origin/master(两者都在您的机器上是本地的)将为您提供您想要的 - 那是 comapre master上游远程仓库的状态。

    【讨论】:

      【解决方案3】:

      这不是 git status 背后的意图。您需要改用git diff

      git diff <your (master?) path> <remote path>
      

      这经常出现。例如:git diff between remote and local repo

      【讨论】:

        【解决方案4】:

        您需要先进行提取。这将更新您的本地存储库以匹配远程。

        git fetch origin
        git status
        

        Fetch 不会像 git pull 那样改变你的工作目录。

        【讨论】:

          【解决方案5】:

          简短回答:不,它没有。

          它将您当前的工作目录与您的本地 HEAD 提交进行比较。

          来自文档:

          显示索引文件和当前 HEAD 提交之间存在差异的路径,工作树和索引文件之间存在差异的路径,以及工作树中未被 Git 跟踪(且未被 gitignore 忽略)的路径[5])。

          https://git-scm.com/docs/git-status

          【讨论】:

          • 是的,我如何强制进行真实检查?
          • 看本的回答;我没有看到你问题的最后一部分
          猜你喜欢
          • 2011-12-17
          • 2011-09-03
          • 1970-01-01
          • 2019-05-07
          • 2012-09-21
          • 2017-08-17
          • 2021-09-03
          • 1970-01-01
          相关资源
          最近更新 更多