Git:如何检查本地存储库是否最新?


Answers:


94

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

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

3
谢谢!但是,从输出中很难理解添加/修改/删除了哪些文件。
2011年

1
您将看到更新了哪些标记以及各个分支的start..end提交范围。如果这还不够,那么请以适当的获取(而不是拉取)的方式进行操作,这将为您提供适当的,单独的远程本地副本,而不影响您自己的分支工作。拉动会尝试将两者合并,这不是您想要的。无论您是否--dry-run,数据传输都是相同的。
菲利普·奥克利

4
为什么在我跑步时git fetch --dry-run什么也没出现?
Paramvir Singh Karwal

3
@ParamvirSinghKarwal Git报告的内容很少。如果无话可说,它什么也没说,好像什么也没发生。也许您是最新的常规访存refspec。也许加上--all
菲利普·奥克利

1
@AaronBeall如果是这种情况,那么很可能意味着您已经在本地获取了这些更改(因此无需获取任何内容),但尚未将它们合并到您的分支中。git pull大致等于git fetch && git merge。如果您在任何时候都运行了不带的抓取操作--dry-run,那么您已经在本地抓取了东西。
DuckPuppy

34
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) <-------

列出了所有历史分支。如果您的存储库具有悠久的历史,那么输出将非常混乱。
Paulo Carvalho

git remote show origin | grep“您的分支机构”
吉姆·史密斯

25

首先使用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)一起使用,则可以查看更新了哪些分支,因此您实际上不需要任何其他命令。


2
为什么这么远?git remote update ; git status -uno解决了。git fetch --dry-run即使本地位于远程后面,也不会输出任何信息。
亚伦·比尔

1
git remote -v update是我的答案。
Paulo Carvalho

17

您可以git status -uno用来检查本地分支机构是否与原始分支机构保持最新。


18
它仅给出本地状态,而不检查远程分支。
Ishan Liyanage 2014年

4
只给当地人,但是git remote update ; git status -uno做到了!在git fetch --dry-run我预期它(并没有给出输出git pull会拉的东西)。
亚伦·比尔

1
这个答案是错误的,应该删除。就其本身而言,它延续了关于Git的工作原理的一个非常普遍但错误的神话,只有当/如果有人决定阅读对该评论的评论,这个神话才会消失。
普罗米修斯

8

并非如此-但是我看不到会有什么git fetch伤害,因为它不会改变您当地的任何分支机构。


我完全同意这一点。Git pull可能会损坏文件,并覆盖它们。但是git fetch仅拉下元数据,允许git status之类的命令告诉您本地仓库是否是最新的,而不会覆盖任何文件。它可能不会回答问题的字母,但会回答问题的实质,为您提供所需的工具。使用Git进行获取,然后git status会告诉您本地仓库相对于远程服务器的位置,而不会覆盖文件。
merlit64


5

您需要发出两个命令:

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

1
这是可行的,但问题很明显地表明没有'fetch'。在许多情况下,您想知道本地存储库与远程存储库有何不同,而无需实际获取或合并更改。
pedram bashiri

1
@pedrambashiri我真的很好奇,喜欢什么?据我所知,单凭取货绝对不会损害任何东西。
普罗米修斯

@Prometheus第一件事,我只是想指出,当一个问题明确指出“没有获取”时,您根本无法在获取的答案中使用获取,如果没有其他方法可以做到,或者没有实际的理由,那么就不需要在答案中进行解释。但是要回答您的问题,获取操作会更新您的远程存储库的本地副本。看看这篇博文
pedram bashiri

4

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

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

要查看本地分支和远程跟踪分支之间的区别,可以按以下说明使用git diff或git cherry。


2

如果您使用

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

您将收到有关其是否最新的反馈。因此,基本上,您只需要在前面给出的答案中添加“详细”选项即可。


1

不使用git fetch或则不可能git pull。您如何知道存储库是否为“最新”,而不必去远程存储库查看“最新”的含义?


5
请确认!您刚刚回答了您的想法!您应该更加小心,因为新手会喜欢它!
Amanuel Nega

4
@AmanuelNega:这只是基本逻辑。如果您想知道本地存储库是否与远程存储库处于同一状态,则需要知道远程存储库的状态。期。如果您不知道远程存储库的状态,则可能无法知道本地存储库是否处于相同状态。请注意,git pullOP明确禁止在问题中投票和接受的答案最高。
约尔格W¯¯米塔格

2
被告知!git status -uno这行得通,还可以git show-branch *master用来查看所有主分支的状态!你还在说那是不可能的吗?只要您可以访问遥控器,就可以看到任何分支的状态!
Amanuel Nega

2
@AmanuelNega:git status仅告诉您本地裁判的状态,而不告诉您本地裁判是否与远程裁判保持最新。再次:从逻辑上讲,如果不获取远程仓库的状态就无法知道远程仓库的状态。期。这只是时空的基本规律。
约尔格W¯¯米塔格

6
这不是“逻辑上”不可能的,因为不言而喻,有人可以在服务器机房里给某人打电话,说:“ HEAD在master分支上的哈希是什么”,他们可以告诉您,然后您可以检查本地并发现自己没有没有那个哈希。现在,您知道它们不同步。
詹姆斯·罗宾逊

1

尝试格式化我的答案,但无法格式化。请stackoverflow小组,为什么发布答案如此困难。

没关系

答案:
git fetch origin
git status(您将看到类似“您的分支落后9个提交在'origin / master'之后”的结果)
以更新为远程更改:git pull

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.