我四处搜寻,没有找到这个问题的答案。
我在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仓库中的本地主分支和最新版本之间的差异?只需比较本地和远程并查看更改。我找不到合适的方法。
感谢。
答案 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只会高效地发送完成正在更新的远程跟踪分支所必需的对象,除非你的源代码存储了异常大的文件,否则这应该没什么区别。此外,即使您不打算使用其他存储库中的分支的完整历史记录,也常常很有用,例如,您可以检查该开发历史记录。