Git与集中式工作流

4

我是git的新手,正在使用类似svn的集中式工作流。我想定期了解自己与中央仓库的状态。例如,如果我运行以下命令...

$ git clone git@github.com:centralrepo/test.git
$ cd test; <make some changes inside test/>
$ git commit -a
$ git pull

当执行git pull命令时,会显示“already up-to-date”的提示。为什么git pull不报告更改,如果这是正确的行为,有没有办法知道我的本地版本库与远程版本库不同步?

3个回答

7
git pull命令可以将远程代码库中的更改拉取到本地,相当于svn update。但是,它不会提到本地存在而远程不存在的更改。您还可以使用git fetch从远程获取更新,但不会将其应用于您的工作区。
在最近版本的git(例如此处的1.7.2.3)中,git status将打印一些信息,以帮助您了解这一点,例如:
# On branch master
# Your branch is behind 'origin/master' by 20 commits, and can be fast-forwarded.

我执行了git fetch命令后,出现了这个提示,意味着有变更等待应用到我的工作空间中(通过执行git pull命令)。

相比之下,如果我将这些变更拉取并在本地进行修改和提交,git status会告诉我:

# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.

也就是说,我有一些本地更改可以推送到远程。然后我可以通过执行 git log origin/master.. 来列出它们。

谢谢,我现在明白了。除了使用“git log origin/master…”作为解决方案外,Jason建议使用“git diff”远程分支也向我展示了本地与远程的更改。 - Ravi
没错:如果你只有一个本地更改,git log -p .... 会显示相同的内容。如果你有多个本地更改,git log 将分别显示每个更改的差异,而 git diff 将显示所有更改的聚合差异。 - araqnid

3
"git pull"命令只是从远程仓库中拉取更改并将其合并到本地分支中。
如果您想查看差异,应使用git br -a列出远程分支,然后git diff追踪您本地分支的远程分支。

1

只需使用git fetch命令更新本地存储库中的远程分支。对话框将显示是否有下载内容,您可以使用git diffgit log进行比较。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接