邮件列表++git format-patch
可以git apply
生成作者!=提交者
在像 Linux 内核这样的项目中,补丁所在的位置:
使用不同的作者和提交者生成一个新提交:
- 作者是编写补丁的人
- 提交者是谁是项目维护者,谁合并了补丁
例如,请参阅这个随机选择的补丁和相应的提交:
像 GitHub 和 GitLab 这样的 Git Web 界面可能会也可能不会生成 author != committer
由于 Git(Hub|Lab) 在同一台机器上同时拥有上游和分支存储库,它们可以自动执行您可以在本地执行的任何操作,包括:
创建一个合并提交。
不生成作者!= 提交者。
保持 SHA 或新提交完整,并创建新提交:
* Merge commit (committer == author == project maintainer)
|\
| * Feature commit (committer == author == contributor)
|/
* Old master (random committer and author)
从历史上看,这是 GitHub 上第一个可用的方法。
在本地,这是通过git merge --no-ff
.
这会为每个拉取请求生成两个提交,并在 git 历史记录中保留一个分叉。
变基在上面master
GitHub 还破解了提交以设置提交者 == 按下合并按钮的人。这不是强制性的,甚至在本地默认情况下也不会这样做git rebase
,但它赋予项目维护者责任。
git 树现在看起来像:
* Feature commit (committer == maintainer, author == contributor)
|
* Old master (random committer and author)
这与git apply
电子邮件补丁完全一样。
目前在 GitHub 上:
- 您通过合并按钮上的下拉菜单选择合并时的方法
- 所有者可以在回购设置上启用或禁用方法
https://help.github.com/articles/about-merge-methods-on-github/
如何设置新提交的提交者?
我能找到的最好的方法是使用环境变量来覆盖提交者:
GIT_COMMITTER_NAME='a' GIT_COMMITTER_EMAIL='a' git commit --author 'a <a>'
如何获取给定提交的提交者和提交日期?
默认情况下,仅作者数据显示在git log
.
要查看提交者日期,您可以:
专门为此格式化日志:
git log --pretty='%cn %cd' -n1 HEAD
在哪里cn
和cd
代表Committer Name
和Committer Date
使用fuller
预定义的格式:
git log --format=fuller
另请参阅:如何配置“git log”以显示“提交日期”
转到低级别并显示整个提交数据:
git cat-file -p HEAD
如何设置新提交的提交者日期?
git commit --date
只设置作者日期:对于提交者日期,我能找到的最好的是环境变量:
GIT_COMMITTER_DATE='2000-01-01T00:00:00+0000' git commit --date='2000-01-01T00:00:00+0000'
另请参阅:Git 中的作者和提交者有什么区别?
Git 如何在内部存储作者和提交者?
请参阅:git commit 对象的文件格式是什么?
基本上,提交是一个文本文件,它包含两个行分隔的字段:
author {author_name} <{author_email}> {author_date_seconds} {author_date_timezone}
committer {committer_name} <{committer_email}> {committer_date_seconds} {committer_date_timezone}
这清楚地表明两者都是提交对象中的两个完全独立的数据条目。