我正在将所有内容转换为Git供我自己使用,我发现存储库中已经有一些旧版本的文件。我如何根据文件的“修改日期”以正确的顺序将其提交到历史记录中,以便我拥有文件的准确历史记录?
有人告诉我这样可行
git filter-branch --env-filter="GIT_AUTHOR_DATE=... --index-filter "git commit path/to/file --date " --tag-name-filter cat -- --all
我正在将所有内容转换为Git供我自己使用,我发现存储库中已经有一些旧版本的文件。我如何根据文件的“修改日期”以正确的顺序将其提交到历史记录中,以便我拥有文件的准确历史记录?
有人告诉我这样可行
git filter-branch --env-filter="GIT_AUTHOR_DATE=... --index-filter "git commit path/to/file --date " --tag-name-filter cat -- --all
当前回答
您可以像往常一样创建提交,但是在提交时,将环境变量GIT_AUTHOR_DATE和GIT_COMMITTER_DATE设置为适当的日期时间。
当然,这将使提交位于分支的顶端(即,在当前HEAD提交的前面)。如果你想在回购中把它推得更远,你必须变得有点花哨。假设你有这样的历史:
o--o--o--o--o
你希望你的新提交(标记为“X”)出现在第二:
o--X--o--o--o--o
最简单的方法是从第一次提交开始分支,添加新提交,然后在新提交的基础上重新构建所有其他提交。像这样:
$ git checkout -b new_commit $desired_parent_of_new_commit
$ git add new_file
$ GIT_AUTHOR_DATE='your date' GIT_COMMITTER_DATE='your date' git commit -m 'new (old) files'
$ git checkout master
$ git rebase new_commit
$ git branch -d new_commit
其他回答
我知道这个问题很老了,但这对我来说确实很管用:
git commit --date="10 day ago" -m "Your commit message"
你想要的简单答案:
GIT_AUTHOR_DATE="2020-10-24T18:00:00 +0200" GIT_COMMITTER_DATE=$GIT_AUTHOR_DATE git commit
注意时区字符串,并为您的时区设置一个合适的字符串。即+0200,-0400
git——日期只更改GIT_AUTHOR_DATE,但许多git应用程序,例如,GitHub显示GIT_COMMITTER_DATE。确保也更改了GIT_COMMITTER_DATE。 git在默认的UNIX日期输出中不知道时区。请确保将datetime格式格式化为兼容的格式,例如ISO8601。
OS X中的完整示例(将GIT_COMMITTER_DATE和GIT_AUTHOR_DATE更改为4 hours ago):
x=$(date -v -4H +%Y-%m-%dT%H:%M:%S%z); export GIT_COMMITTER_DATE=$x; git commit --amend --date $x
为了使提交看起来像过去完成的,你必须设置GIT_AUTHOR_DATE和GIT_COMMITTER_DATE:
GIT_AUTHOR_DATE=$(date -d'...') GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE" git commit -m '...'
date -d'…可以是准确的日期,比如2019-01-01 12:00:00,也可以是相对的日期,比如5个月前的24天前。
要查看git日志使用的两个日期:
git log --pretty=fuller
这也适用于合并提交:
GIT_AUTHOR_DATE=$(date -d'...') GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE" git merge <branchname> --no-ff
在我的例子中,当使用——date选项时,我的git进程崩溃了。也许我做了什么可怕的事。结果是一些索引。出现锁文件。所以我手动删除了。git文件夹中的。lock文件并执行,所有修改过的文件都要在通过的日期内提交,这次它工作了。谢谢你的回答。
git commit --date="`date --date='2 day ago'`" -am "update"