【问题标题】:How do I get last commit date from git repository?如何从 git 存储库获取上次提交日期?
【发布时间】:2014-10-23 04:20:28
【问题描述】:

我需要 git 中的最后提交日期。这意味着我的程序中的最新更新日期。

我使用了命令:$git log -1,但是这个命令会给我本地存储库的日期。相反,我需要来自远程存储库的日期。

我尝试了如下一些命令。

git log -n 1 origin/Sprint-6.
git rev-parse --verify HEAD

【问题讨论】:

  • 您可以随时使用gitk --all 打开所有分支(包括远程)的树形视图

标签: git git-commit


【解决方案1】:

获取最后提交日期:

您想要“给定分支的给定 git 用户和 git 项目的“存储库范围内的最后提交日期”。

您之后的日期是您访问仓库并转到 commits -> master 时显示的最新日期,例如:

https://github.com/sentientmachine/TeslaAverageGainByMonthWeekDay/commits/master

页面顶部显示最新的提交日期。

使用终端获取 git 中的最后本地提交日期

使用git help log 获取有关格式代码的更多信息以传递给--format 以告诉 git log 要获取的数据类型。

git 中的最后提交日期:

git log -1 --format="%at" | xargs -I{} date -d @{} +%Y/%m/%d_%H:%M:%S
#prints 2018/07/18 07:40:52

但正如您所指出的,您必须在执行最后一次提交的机器上运行该命令。如果最后一次提交日期是在另一台机器上执行的,上面的命令只报告本地最后一次提交……所以:

或存储库范围:获取最后一次 git 提交日期

同上,但先执行 git pull。

git pull; 
git log -1 --format="%at" | xargs -I{} date -d @{} +%Y/%m/%d_%H:%M:%S
#prints 2018/07/18 09:15:10

或者(如果存储库托管在 GitHub 中)使用 JSON API:

按计划拉动 git 并不酷,因为它很慢,而且你正在用不必要的网络流量敲打 GitHub。直接查询GitHub rest api即可:

#assuming you're using github and your project URL is visible to public:
# https://github.com/yourusername/your_repo_name

#then do:
curl https://api.github.com/repos/yourusername/your_repo_name/commits/master

这会让你面对一个满是 json 的屏幕,所以把你最喜欢的 json 解析器发送给它,并获取名为 date 的字段:

curl https://api.github.com/repos/<your_name>/<your_repo>/commits/master 2>&1 | \
grep '"date"' | tail -n 1
#prints "date": "2019-06-05T14:38:19Z"

来自下面的 cmets,gedge 对咒语进行了方便的花花公子改进:

git log -1 --date=format:"%Y/%m/%d %T" --format="%ad"
2019/11/13 15:25:44

或者更简单:(https://git-scm.com/docs/git-log/1.8.0)

git --no-pager log -1 --format="%ai"
2019-12-13 09:08:38 -0500

您的选择是北、南、东和“丹尼斯”。

【讨论】:

  • 只是好奇;使用xargs 有什么特殊原因吗?我在想date -d @`git log -1 --format="%at"` 会是一个更简洁的解决方案。
  • 我对@9​​87654336@ 的选择融合了google-fu、猜测和检查以及布朗运动。您的解决方案似乎去除了不必要的洋葱层。有一艘向上的船。
  • 对于 Mac OSX,日期不同并且不起作用。您可能想使用DT=`git log -1 --format="%at"` &amp;&amp; python -c "import time; print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime($DT)))"
  • 这个 osx 命令需要更多层。也许您可以向 mongodb 添加一个 javascript ajax 命中,这样网络规模就更大了。
  • 讽刺xargs...date?什么时候可以:git log -1 --date=format:"%Y/%m/%d %T" --format="%ad"
【解决方案2】:

从 git 存储库中获取最后一次提交日期(Unix 纪元时间戳)

  • 指挥部: git log -1 --format=%ct
  • 结果: 1605103148

注意:您可以访问git-log 文档以获取有关选项的更详细说明。

【讨论】:

    【解决方案3】:

    以下命令会有所帮助:

    git log -1 --format=%cd 
    

    这将打印一个文件的最新更改日期。 -1 显示一个日志条目(最近的),--format=%cd 显示提交日期。 有关选项的完整说明,请参阅 git-log 的文档。

    【讨论】:

    • 我如何为远程存储库获取这个?
    • 有点晚,但为了后代:要获得远程分支的最后更改,请在末尾添加“/”,例如git log -1 --format=%cd origin/master
    • 您还可以获取特定标签的最后提交日期:git log -1 --format=%cd TAG
    • 直截了当的解决方案,但仅捕获当前签出的分支。对所有分支使用“--all”,即git log --all -1 --format=%cd,或分支名称,即git log main my_experiments HOTFIX ...(如果你没有多个分支,你可能会错过对Git核心意图和概念的一般理解,这通常会导致复杂的“解决方法”,而不是使用 GIt 的“内置”功能)
    • @Zinki 请注意,“origin/master”是一个指向远程的指针和缓存,而不是远程本身,即您应该提前执行git fetch 以获得当前状态你的遥控器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 2020-12-28
    • 2021-07-20
    • 1970-01-01
    相关资源
    最近更新 更多