我希望能够为脚本执行此操作。我基本上是在Git中重新创建一些代码的整个版本历史 - 它目前使用不同的版本控制系统。我需要脚本能够在保留提交的原始作者(和日期)的同时将提交添加到Git中。
假设我知道提交作者和更改的日期/时间,是否有允许我这样做的Git命令?我假设有,因为git-p4做了类似的事情。我只是要求最好的方法来做到这一点。
答案 0 :(得分:134)
查看--author
的{{1}}选项:
来自man page:
git commit
覆盖提交作者。指定明确的作者 使用标准
--author=<author>
格式。除此以外 假设A U Thor <author@example.com>
是一种模式 并用于搜索现有的 该作者承诺(即<author>
);然后从中复制提交作者 首先发现这样的提交。
答案 1 :(得分:87)
添加到此:接受的答案中提到的--author
选项只会覆盖 author ,而不会覆盖提交的 committer 信息。< / p>
在大多数情况下,这是正确的行为,但如果由于某种原因您需要手动覆盖提交者信息,请使用GIT_COMMITTER_NAME
和GIT_COMMITTER_EMAIL
环境变量(还有一个GIT_COMMITTER_DATE
)。见Git-Internals-Environment-Variables
$ GIT_COMMITTER_NAME="New Name" GIT_COMMITTER_EMAIL="name@email.com" git commit --author="New Name <name@email.com>"
这将使提交看起来像是由指定用户提交的和。
答案 2 :(得分:6)
使用-c选项和git-commit可以覆盖以前的任何配置。它不会影响您的全局/项目配置。例如,要覆盖名称和电子邮件:
git -c user.name='My Name' -c user.email='my@email.com' commit -m "Custom message"
但是,如果您打算保留它作为其他设置,则建议使用别名。编辑您的~/.gitconfig
文件,并为每个非默认用户和电子邮件添加新的别名。
[user]
name = My Name
email = default@email.com
[alias]
commit-x = -c user.name='My X Name' -c user.email='mr_x@email.com' commit
commit-y = -c user.name='My Y Name' -c user.email='mr_y@email.com' commit
commit-z = -c user.name='My Z Name' -c user.email='mr_z@email.com' commit
别名将在全球范围内应用。测试一下。
git commit -m "Custom message with committer and author My Name <default@email.com>"
git commit-x -m "Custom message with committer and author My X Name <mr_x@email.com>"
git commit-y -m "Custom message with committer and author My Y Name <mr_y@email.com>"
git commit-z -m "Custom message with committer and author My Z Name <mr_z@email.com>"