Git:如何检查本地回购是否是最新的?

Mis*_*hko 52 git git-pull git-fetch

我想知道我的本地回购是否是最新的(如果没有,理想情况下,我希望看到更改).

我怎么能检查这个而不做git fetch还是git pull

Phi*_*ley 72

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

--dry-run
Show what would be done, without making any changes.
Run Code Online (Sandbox Code Playgroud)

  • @ParamvirSinghKarwal Git 报告的内容很少。如果无话可说,那就什么都不说,就好像什么都没发生一样。也许您是最新的常规 fetch 的 refspec。也许添加`--all`? (5认同)
  • 为什么当我运行`git fetch --dry-run`时什么也没显示? (3认同)
  • @DuckPuppy是的,所以看来“git fetch”不足以“知道我的本地存储库是否是最新的”。我不清楚当这个答案被接受或者问题措辞不明确时,OP 是否不理解这一点。 (3认同)
  • 谢谢!但是,从输出中很难理解添加/修改/删除了哪些文件. (2认同)
  • @AaronBeall如果是这种情况,那么很可能意味着您已经在本地获取了这些更改(因此无需获取任何内容),但尚未将它们合并到您的分支中。`git pull` 大致相当于 `git fetch && git merge`。如果您在任何时候在没有“--dry-run”的情况下运行获取,那么您已经在本地获取了内容。 (2认同)
  • @AaronBeall 好吧,如果 OP 意味着检查本地存储库状态,那么这就是正确的解决方案。检查实际工作副本是否是最新的则是另一回事。有一些开放的主题,所有这些都表明没有这样的选择。没有“git merge --dry-run”或“git pull --dry-run”,这有点痛苦。总是建议的解决方案是获取,“git merge --no-commit --no-ff”并中止,但它没有回答问题,因为获取已经完成。更不用说没有阶段性的改变了。 (2认同)

小智 46

首先使用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 远程更新;git status -uno` 解决了它。即使在本地落后于远程的情况下,`git fetch --dry-run` 也没有给出任何输出。 (3认同)
  • @Dave - `-uno` 意味着 `--untracked-files=no` 请参阅:/sf/ask/3243448281/ 无论如何,我认为你可以只需运行“git status” (2认同)

jim*_*ith 17

git remote show origin
Run Code Online (Sandbox Code Playgroud)

结果:

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) <-------
Run Code Online (Sandbox Code Playgroud)

  • 同意@PauloCarvalho。我的黑客:`git Remote show origin | grep $(git rev-parse --abbrev-ref HEAD) | grep $(git rev-parse --abbrev-ref HEAD) | grep $(git rev-parse --abbrev-ref HEAD) 尾巴-1` (2认同)

flo*_*dee 12

您可以git status -uno用来检查您的本地分支是否与原始分支是最新的.

  • 它只提供本地状态,而不是使用远程分支进行检查. (10认同)
  • 只提供本地,但`git远程更新;git status -uno` 成功了!当我期望它时,“git fetch --dry-run”没有给出输出(并且“git pull”会拉东西)。 (5认同)
  • 这个答案是错误的,应该删除。事实上,它延续了关于 Git 如何工作的一个非常常见但错误的神话,只有当/如果有人决定阅读它的评论时,这个神话才会被消除。 (3认同)

小智 7

您需要发出两个命令:

  1. git 获取来源
  2. 状态

  • 这是可行的,但问题清楚地表明没有“获取”。在很多情况下,您想知道本地存储库与远程存储库有何不同,而无需实际获取或合并更改。 (2认同)

Ama*_*ega 6

另一种选择是查看远程分支的状态,将 git show-branch remote/branch其用作比较,您可以看到git show-branch *branch所有远程和存储库中的分支!查看此答案了解更多/sf/answers/229489921/


小智 5

不是真的 - 但我不知道git fetch会有什么伤害,因为它不会改变你当地的任何分支机构.

  • 我完全同意这一点。Git pull 可能会造成破坏,覆盖文件。但 git fetch 仅提取元数据,允许 git status 等命令告诉您本地存储库是否是最新的,而不会覆盖任何文件。它可能无法回答问题的字面意思,但它回答了问题的精神,为您提供您想要的工具。Git fetch,然后 git status 会告诉您本地存储库相对于远程存储库的位置,而不会覆盖文件。 (2认同)

bra*_*sch 5

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

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

要在获取后查看本地分支和远程跟踪分支之间的区别,您可以使用git diff 或 git cherry 如此处所述。


Jea*_*arc 5

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':
Run Code Online (Sandbox Code Playgroud)

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