Git - 比较本地和远程,而无需先获取

  • 本文关键字:获取 比较 Git 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 存储库中的本地主分支和最新版本之间的差异?只需比较本地和远程并查看更改。我只是找不到正确的方法。

谢谢。

尽管您可以使用以下命令获取有关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 有效地只发送完成正在更新的远程跟踪分支所需的对象,除非您将异常大的文件与源代码一起存储,否则这应该不会有太大区别。 此外,即使您不打算使用其他存储库中的分支的完整历史记录,通常也很有用,例如,您可以检查该开发历史记录。

最新更新