git fetch origin不会告诉我哪些文件已被更新

时间:2016-04-20 14:29:23

标签: git

当我使用git fetch origin时,我收到了这样的消息:

remote: Counting objects: 7, done.
remote: Total 7 (delta 5), reused 5 (delta 5), pack-reused 2
Unpacking objects: 100% (7/7), done.
From http://xxx/xxx
   ee28fb0..fdca511  master     -> origin/master

然而,它并没有告诉我哪些文件确实发生了变化,就像svn up一样。

我需要在这里使用什么?

2 个答案:

答案 0 :(得分:1)

您的开头是错误的前提,因为git fetch故意更新任何文件。这是有目的的:它允许您随时git fetch,因为它永远不会触及您可能正在处理的任何文件。 git fetch所做的是向您的存储库添加更多提交,而不会影响在工作区中实际签出的任何内容。 (如果你熟悉“星际迷航”下一代系列中的这些恶棍,Git就像Borg一样:你们将新提交的技术独特性添加到你的git-borg集体中。你用git做的大多数事情都会结束承诺,旧的承诺永远存在。)

事情就是之后git fetch,您通常会运行git merge,或者通常更合适git rebase。这些命令影响您的工作区文件,现在是时候询问将要更改的内容。 (Git鼓励与svn不同的工作流程,git rebasesvn up不完全相同,但可能就是你想要的。如果你从未做过任何自己的改动,{{1可能是你想要的,但是git merge --ff-only会得到相同的结果。)

因为git允许甚至鼓励复杂的分布式工作流(你和许多其他人都或多或少地同时做出许多改变),查看哪些改变会影响复杂的事情。但是,如果您从未进行任何自己的更改,我们会得到一个更简单的情况,使用简单易用的方式查看您刚从其他地方获得的内容,以及git rebasegit rebase将执行的操作

最有可能的是,git merge --ff-onlyMort answered。如果您使用git diff --stat(有或没有git merge),git会在完成后为您运行--ff-only。此差异需要两个修订ID,并将与第一个修订关联的树与与第二个修订关联的树进行比较。棘手的部分是选择修订ID。从git diff --stat的输出中复制它们有效,但很烦人。

如果没有这种复制,这是实现相同结果的另一种方法:

git fetch

(取决于您的shell,您可能需要引用花括号)。

名称git diff --stat origin/master@{1} origin/master 告诉git在最近更新之前获取origin/master@{1}中存储的值。这将是第一个显示的哈希origin/master,在本例中为git fetch

名称ee28fb0...告诉git获取当前值,这是origin/master刚设置的值:在这种情况下,git fetch

关于这一点的好处是,您可以通过将fdca511...origin/master@{2}origin/master@{1}进行比较来及时回溯。

您还可以将origin/master - 您自己的分支 - 与以下任何一个进行比较:

master

这将显示您在 git diff origin/master@{1} master 中所做的更改,与您在master之前origin/master中的更改相比较。 (添加git fetch以获取摘要版本而不是完整差异。)或者:--stat将显示您所拥有的与您刚刚获得的内容不同的内容。如果你从未做过自己的改变,那就是他们从那时起所做的事情"。如果您进行自己的更改,您将需要查看您和他们的合并基础,这是rebase和/或merge真正进入的地方,但是完全是另一个话题。

答案 1 :(得分:0)

查看输出。您可以运行git log ee28fb0..fdca511以在master上更改文件。 (或git fetch等)

问题是,if (is_writable($directory)) { echo 'I can write here'; } else { echo 'I can not write here'; } 可以更新很多很多引用。因此,当您真正关心的是主人时,您并不总是希望看到功能分支和QA分支中的所有更新。