如何在Heroku上查看远程Git版本

93

我在Heroku上部署应用程序时使用git push heroku master。但是我该如何查看我推送到Heroku的哪个版本?(我经常怀疑是否已经推送了最新版本)

对于不熟悉此过程的人,Heroku的创建脚本会生成一个远程git仓库,需要将其推送。一旦推送,代码就会神奇地部署。

Heroku将一个远程仓库添加到本地仓库中,格式如下:

$ git remote add heroku git@heroku.com:appname.git

更多信息请参阅Heroku手册"使用Git部署"

问题是:我如何在Heroku存储库中查看最新版本?


请注意,Heroku存储库中的最新版本不一定与生产版本相同。如果您运行 heroku releases:rollback,则生产版本将更改,但Heroku存储库将保持完全相同。使用 heroku:releases 查看正在生产中的内容。 - Flimm
6个回答

129

其实正确答案很简单。你不需要checkout任何东西,也不需要使用COMMIT_HASH的hack方法(在Cedar栈上不起作用)。你所需要做的就是:git ls-remote <remote>

 > git ls-remote heroku
ddaszxcewb585d3a3c00de816a197b14462791a3        HEAD
ddaszxcewb585d3a3c00de816a197b14462791a3        refs/heads/master

这将显示特定远程存储库指向的版本? - E.E.33
12
为了查看该消息的输出并轻松地查看Git提交日志和文本差异,请执行以下操作:git ls-remote heroku | awk 'END{print $1}' | xargs git show - Bobby Norton
@BobbyNorton的评论直截了当地回答了这个问题。不错。 - Ben Hull
请注意,这不一定是生产环境中的版本。如果您刚刚使用 heroku releases:rollback 进行了回滚,则生产环境中的版本可能是其他版本。请使用 heroku releases 查看生产环境中的版本。 - Flimm

66
如果你刚刚推送并且想要确保你已经更新到最新的代码,那么你可以运行 git remote show heroku 命令,你将会看到类似如下的输出结果:
* remote heroku
  Fetch URL: git@heroku.com:XXX.git
  Push  URL: git@heroku.com:XXX.git
  HEAD branch: master
  Remote branch:
    master tracked
  Local ref configured for 'git push':
    master pushes to master (up to date)

如果不是最新的,(up to date)将在结尾被替换为(fast forwardable)

或者,如果你想要查看heroku远程的完整提交日志,我所知道的唯一方法是先检出它。git checkout heroku/master将给你当前提交哈希和提交注释:HEAD is now at <short commit hash>... <commit comment>,而git log将给你剩下的故事。


非常感谢您的回答!我到处都在找它。 - tbaums
3
不会告诉你参考文献。 - Obie
有没有办法在线查看文件本身,就像在 GitHub 存储库中一样? - eran otzap

46

您现在可能需要Heroku发布,然后您会看到大约5个提交记录,起码开始了。


2
谢谢。这实际上向我展示了我想要找到的内容(在回滚后实际运行的内容)。 - Cymen

25

怎么样呢?

git log heroku/master

根据您的部署方式,master 分支引用可能会更新到已部署的 SHA 或者不会更新。 - Justin

11

如果你遇到了像我刚遇到的这种情况,一个同事将你的Heroku应用程序回滚到一个在heroku releases中没有显示的版本,因为他们只跟踪两个版本......那么Heroku / master方法的检出是无法帮助的,因为HEAD不再是当前部署的版本。

幸运的是有一个未记录的方法可以解决问题:

$ heroku console "ENV['COMMIT_HASH']"
"12abcdef"

这很好,但有没有办法获取最后一次的git提交。我检查了环境变量,没有任何可用于日期的变量。 - David
10
这个在 Cedar 上已经不起作用了,有没有替代方法? - Ev Dolzhenko
我收到了 'heroku console' has been disabled 的错误信息(https://devcenter.heroku.com/changelog-items/109)。我尝试了 heroku run "ENV['COMMIT_HASH']",但是我得到了 bash: ENV[COMMIT_HASH]: command not found 的错误提示。当我使用 echo 命令时,我得到了字符串 ENV[COMMIT_HASH] - guyaloni
您可以通过运行 heroku run console 来访问Cedar堆栈上的Rails控制台,并且您可以通过运行 heroku run echo $ENV['COMMIT_HASH'] 来查看 ENV['COMMIT_HASH'] 变量内部的内容(由于它是一个环境变量,您需要 $,就像echo $PATH一样)。 - slant

-1

Heroku在底层使用普通的Git,因此..

显示当前分支上最新的5个提交记录: git log -5

通过Git的GUI查看提交历史: gitk

查看当前状态(它将显示您是否有任何未提交的文件): git status


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