Github对Git commit date操作的诸多细节,你注意到了么

简介: 我们开发人员几乎每天都要使用git commit,但你知道他对时间处理的一些细节吗?一起来了解一下吧

git log是再常见不过的一个git命令,通常情况下他的标准输出格式如下:

commit [commit id]
Author: [user id] <[user email]>
Date: [commit date]

    [commit msg]

...

在进行commit操作时候,除了commit id以外,其余的信息都是可以用扩展参数修改的:

内容 参数 格式
Author --author --author="[user id] <[user email]>"
Date --date 格式丰富,参考文章详解git commit --date的参数格式
Message -m -m "[msg]"(必填项,但可以使用--allow-empty-message参数忽略必填要求)

格式丰富多样的Date便是本文的主题,使用--date参数马上就可以看到效果,无论在提交后的成功消息,还是在git log都可以看到已经是自己在--date参数指定的日期了,也许你会有这样的想法,如果我有一个repo的log是这样的:

  • 3月1日 初始化repo
  • 3月3日 添加文件

在3月4日,我提交一个--date指定为3月2日的commit会怎么样呢?其实不用想,git log不会按时间排序的,commits树对象结构上本身就是有序的,按照默认的存储循序,他会做如下显示:

  • 3月1日 初始化repo
  • 3月3日 添加文件
  • 3月2日 修改文件

当然对于托管网站来说,这是个值得讨论的问题,这也是我很多年前关心的一个事,可以在一个各路神仙云集的repo上,也就是 https://github.com/isaacs/github 上找到一个相关的issue,一直讨论这个log日期排序的问题,已经open了整整六年之旧,近两年还有人讨论(当然2013年开到现在还没关的issue也有三页多),至今尚未close,具体的link我就不放了,因为isaacs是值得所有前端开发人员尊敬的人物,在他的issue列表中找一找也是无可厚非,这是个玩笑。具体原因是这个issue的creator是一个典中之典的人,精神上疯疯癫癫的长期信邪教从最近的文字上看有些神志不清的样子,实在没法把包含他内容的link放我的文章,最重要的是很多与他相关的issue因为完全违背isaacs对这个repo讨论的原则要求而被close掉,那么基本的要求都做不到,可见真的宛若野人,完完全全可以isaacs的一段话形容他:

Trolling, disparaging remarks about GitHub, or even just unproductive kvetching

不过由于这个issue下面有很多人很好的解释了什么叫做procedural knowledge,想看可以慢慢找,说远了,话说回来push到Github后会发现还有另外一个问题,看到用--date指定日期后的commits,Gitlab的用户十分满意,Github的用户却犯了愁,这是为什么呢?

Github用户打开repo的Commits视图,发现经过修改的date提交到Github中心之后,发现Github并没有理会--date参数,而是使用了执行git commit命令时的时间,让人怀疑哪里出了问题,但回到自己Github个人中心的主界面,俨然发现在绿油油的contributions图,刚才的commit记录显示的却是--date指定的时间,这非常矛盾。而Gitlab用户并没有遇到这样的问题,他们在Gitlab任何界面看到关于经过修改--date后的那条commit的信息,都显示的是自己--date指定的时间。

原因是Git对commit的记录其实有两套日期,分别是AuthorDate和CommitDate,--date参数只修改了AuthorDate,而没有修改CommitDate,而且CommitDate是没有参数可以设定的,这两个时间都会被推送给远程,Github在commits视图使用的就是CommitDate,这让Github用户很懊恼,要早知道就好了,而且为什么别人Gitlab全都用AuthorDate呢?当然这些也没法细究了。

那么,git commit命令没有参数可以设置CommitDate,开发者们就真的无法修改CommitDate了吗?或者说只能修改git源码?其实并不是,这两个日期都有对应的环境变量,进行如下export即可:

#Commit Date
export GIT_COMMITTER_DATE="[date]"

#Author Date
export GIT_AUTHOR_DATE="[date]"

这下可以不用--date参数了,而且环境变量中设置日期的格式和 详解git commit --date的参数格式 一文提到的是一样的,export好环境变量之后就可以commit了,push后就可以在Github的commits界面看到自己设定的时间了。

使用Windows的开发人员应该注意,几乎可以说,有关git的一切环境变量,都应该在git-bash中乖乖的使用他们嫁接好的export命令,或者是用WSL,Cygwin等等的类Unix模拟终端。git-for-windows这个项目并没有真正的支持Windows的风格,在cmd中使用SET命令设置的环境变量,git基本是无视的。

目录
相关文章
|
4月前
|
API 开发工具 git
使用git pull遇到Automatic merge failed; fix conflicts and then commit the result.解决方案卓伊凡
使用git pull遇到Automatic merge failed; fix conflicts and then commit the result.解决方案卓伊凡
232 0
使用git pull遇到Automatic merge failed; fix conflicts and then commit the result.解决方案卓伊凡
|
4月前
|
开发工具 git
使用Git下载指定版本或指定commit
使用Git下载指定版本或指定commit
|
5月前
|
存储 人工智能 缓存
Git Commit规范:为什么有些公司要求变更行数限制?·优雅草卓伊凡
Git Commit规范:为什么有些公司要求变更行数限制?·优雅草卓伊凡
244 3
Git Commit规范:为什么有些公司要求变更行数限制?·优雅草卓伊凡
|
8月前
|
人工智能 前端开发 Java
用git rebase命令合并开发阶段中多条commit提交记录
通过 `git rebase`,可以合并多个提交记录,使开发历史更简洁清晰。操作分为 6 步:查看提交历史 (`git log --oneline`)、设置需合并的提交数 (`git rebase -i HEAD~N`)、修改动作标识为 `s`(squash)、保存退出编辑、调整提交信息、强制推送至远程仓库 (`git push -f`)。此方法适合清理本地无关提交,但若有团队协作或冲突风险,需谨慎使用以避免问题。
1404 60
|
6月前
|
JavaScript 前端开发 持续交付
实际工作中 Git Commit 代码提交规范是什么样的?
实际工作中 Git Commit 代码提交规范是什么样的?
417 7
|
7月前
|
人工智能 API 开发工具
GitHub官方开源MCP服务!GitHub MCP Server:无缝集成GitHub API,实现Git流程完全自动化
GitHub MCP Server是基于Model Context Protocol的服务器工具,提供与GitHub API的无缝集成,支持自动化处理问题、Pull Request和仓库管理等功能。
1491 2
GitHub官方开源MCP服务!GitHub MCP Server:无缝集成GitHub API,实现Git流程完全自动化
|
10月前
|
开发工具 git
如何操作github,gitee,gitcode三个git平台建立镜像仓库机制,这样便于维护项目只需要维护一个平台仓库地址的即可-优雅草央千澈
如何操作github,gitee,gitcode三个git平台建立镜像仓库机制,这样便于维护项目只需要维护一个平台仓库地址的即可-优雅草央千澈
641 69
如何操作github,gitee,gitcode三个git平台建立镜像仓库机制,这样便于维护项目只需要维护一个平台仓库地址的即可-优雅草央千澈
|
5月前
|
网络协议 开发工具 git
解决 git 报错 “fatal: unable to access ‘https://github.com/.../.git‘: Recv failure Connection was rese
在使用 Git/Git小乌龟 进行代码管理的过程中,经常会遇到各种各样的问题,其中之一就是在执行 git clone 或 git pull 等操作时出现 “fatal: unable to access ‘https://github.com/…/.git’: Recv failure Connection was reset” 的报错。这个问题通常是由网络连接问题或代理设置不正确导致的。在我的个人使用经验中,我亲自尝试了四种方法,它们都能够有效地解决这个报错。个人比较推荐方法二。
2761 0
|
7月前
|
前端开发 开发工具 git
Git报错处理:解决git commit时的lint-staged错误提示。
极好的,你对Git的lint-staged出了一个令人头疼的问题。让我们一起钻研一下,找到一种方法来解决一切。 首先,我们要确定你是在做什么操作时候遇到了问题。lint-staged通常在我们运行 git commit 时启动,它做的工作是在你提交之前运行一些指定的命令检查你的代码。当lint-staged报错,多半是因为检查未通过,或者它试图运行的命令存在问题。 让我们以一种图解的方式来描绘一下这个过程,就像canvas上的画面那样。git正在温柔的将你的修改捆绑起来,准备提交。突然,lint-staged走了出来,并开始盘问着Git,寻找可能的错误。如果lint-staged找到了什么
845 24
|
7月前
|
文字识别 网络协议 开发工具
GitHub封锁?推荐5个国产的Git仓库替代平台
近日,GitHub对中国区IP的部分限制引发了广泛关注。未登录用户被拒,已登录用户功能受限,南北网络环境差异更显“内卷”。为应对这一挑战,本文推荐了多个国产Git平台:Gitee(码云)、GitCode(CSDN旗下)、CODING(腾讯系)、CodeUP(阿里云支持)及微信代码管理工具。这些平台功能全面、稳定性强,是开发者迁移项目的理想选择。通过同步代码、配置CI/CD流水线等简单步骤,可确保项目平稳过渡。此次事件提醒我们,掌握核心技能与支持国产平台同样重要!
4989 11