Git - 比较本地和远程而不先获取?

时间:2011-09-27 14:43:01

标签: git compare

我四处搜寻,没有找到这个问题的答案。

我在Heroku上运行了一个应用程序。 从我的本地机器我通常只执行:

git add .
git commit -m "whatever change, I know I can add and commit at the same time..."
git push <the-heroku-repo>

然后它上升并更新Heroku应用程序中的主分支。到目前为止一切都很好。

现在。我想要另一台机器自动从Heroku仓库中取出并自行更新。

所以我这样做:

git clone <the-heroku-repo>

这让我得到了应用程序,我可以看到git配置:

core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
remote.origin.url=git@heroku.com:theapp.git
branch.master.remote=origin
branch.master.merge=refs/heads/master

要更新这个新的仓库我只能做一个拉动:

git pull origin

或者我可以获取并合并:

git fetch origin
git merge origin/master

我的问题

在上面的提取和合并之间,我可以通过执行以下操作来检查更改:

git log -p master..origin/master

有没有办法在没有提取之前找到远程Heroku仓库中的本地主分支和最新版本之间的差异?只需比较本地和远程并查看更改。我找不到合适的方法。

感谢。

1 个答案:

答案 0 :(得分:15)

虽然您可以使用以下方法获取有关origin存储库中分支的一些摘要信息:

git remote show origin

...你需要以某种方式从origin获取分支到你的存储库中以便比较它们。这就是git fetch的作用。当您运行git fetch origin时,它默认只会更新所谓的“远程跟踪分支”,例如origin/master。这些只是存储上次获取时origin中相应分支所在的位置。您一直在处理的所有本地分支机构都不受git fetch的影响。所以,这样做是安全的:

git fetch origin
git log -p master..origin/master

...然后如果您对此感到满意,可以合并或重新绑定到origin/master


我建议您不要担心git fetch origin命令中涉及的资源(磁盘空间或带宽)。 git只会高效地发送完成正在更新的远程跟踪分支所必需的对象,除非你的源代码存储了异常大的文件,否则这应该没什么区别。此外,即使您不打算使用其他存储库中的分支的完整历史记录,也常常很有用,例如,您可以检查该开发历史记录。