当我使用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一样。
我需要在这里使用什么?
答案 0 :(得分:1)
您的开头是错误的前提,因为git fetch
故意不更新任何文件。这是有目的的:它允许您随时git fetch
,因为它永远不会触及您可能正在处理的任何文件。 git fetch
所做的是向您的存储库添加更多提交,而不会影响在工作区中实际签出的任何内容。 (如果你熟悉“星际迷航”下一代系列中的这些恶棍,Git就像Borg一样:你们将新提交的技术独特性添加到你的git-borg集体中。你用git做的大多数事情都会结束承诺,旧的承诺永远存在。)
事情就是在之后git fetch
,您通常会运行git merge
,或者通常更合适git rebase
。这些命令将影响您的工作区文件,现在是时候询问将要更改的内容。 (Git鼓励与svn不同的工作流程,git rebase
与svn up
不完全相同,但可能就是你想要的。如果你从未做过任何自己的改动,{{1可能是你想要的,但是git merge --ff-only
会得到相同的结果。)
因为git允许甚至鼓励复杂的分布式工作流(你和许多其他人都或多或少地同时做出许多改变),查看哪些改变会影响复杂的事情。但是,如果您从未进行任何自己的更改,我们会得到一个更简单的情况,使用简单易用的方式查看您刚从其他地方获得的内容,以及git rebase
或git rebase
将执行的操作
最有可能的是,git merge --ff-only
为Mort 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分支中的所有更新。