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

Pod*_*Pod 7 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>
Run Code Online (Sandbox Code Playgroud)

然后它上升并更新Heroku应用程序中的主分支.到现在为止还挺好.

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

所以我这样做:

git clone <the-heroku-repo>
Run Code Online (Sandbox Code Playgroud)

这让我得到了应用程序,我可以看到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
Run Code Online (Sandbox Code Playgroud)

要更新这个新的仓库,我可以做一个拉动:

git pull origin
Run Code Online (Sandbox Code Playgroud)

或者我可以获取和合并:

git fetch origin
git merge origin/master
Run Code Online (Sandbox Code Playgroud)

我的问题

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

git log -p master..origin/master
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

Mar*_*air 15

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

git remote show origin
Run Code Online (Sandbox Code Playgroud)

...你需要以origin某种方式将分支从存储库中取出以便进行比较.这是做什么的git fetch.当你运行时git fetch origin,默认情况下它只会更新所谓的"远程跟踪分支",例如origin/master.这些只是存储origin上次获取时相应分支所在的位置.您一直在工作的所有当地分支机构都不受影响git fetch.所以,这样做是安全的:

git fetch origin
git log -p master..origin/master
Run Code Online (Sandbox Code Playgroud)

...然后,如果你对此感到满意,你可以合并或重组origin/master.


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

  • 我正在使用PULL,这对我很有帮助,但后来我读了十亿次更喜欢fetch/merge,所以我开始使用它.它工作正常,但我花了一段时间才意识到GIT提取将所有远程分支取入"临时空间",而你是第一个将其名称称为"远程跟踪分支"的人.我真的不能理解所获取数据的去向,因为直到合并它才在你的存储库里面.谢谢 (2认同)