我正在将所有内容转换为Git供我自己使用,我发现存储库中已经有一些旧版本的文件。我如何根据文件的“修改日期”以正确的顺序将其提交到历史记录中,以便我拥有文件的准确历史记录?

有人告诉我这样可行

git filter-branch --env-filter="GIT_AUTHOR_DATE=... --index-filter "git commit path/to/file --date " --tag-name-filter cat -- --all  

当前回答

下面是我用来在过去N=1天提交对foo的更改:

git add foo
git commit -m "Update foo"
git commit --amend --date="$(date -v-1d)"

如果你想提交一个更早的日期,比如3天前,只需更改日期参数:date -v-3d。

例如,当你忘记昨天提交某件事情时,这真的很有用。

UPDATE:——date也接受像“3天前”这样的表达式,甚至是“昨天”这样的表达式。所以我们可以把它压缩成一行命令:

git add foo ; git commit --date "yesterday" -m "Update"

其他回答

git commit --date='year-month-day hour:minutes:seconds' -m "message"

git push 

在我的例子中,当使用——date选项时,我的git进程崩溃了。也许我做了什么可怕的事。结果是一些索引。出现锁文件。所以我手动删除了。git文件夹中的。lock文件并执行,所有修改过的文件都要在通过的日期内提交,这次它工作了。谢谢你的回答。

git commit --date="`date --date='2 day ago'`" -am "update"

在我的情况下,随着时间的推移,我保存了myfile的一堆版本,如myfile_bak, myfile_old, myfile_2010, backups/myfile等。我想把我的文件的历史在git使用他们的修改日期。所以将最老的重命名为myfile, git添加myfile,然后git提交——date=(从ls -l修改日期)myfile,将下一个最老的重命名为myfile,另一个git提交——date,重复…

为了实现某种程度上的自动化,您可以使用shell-foo来获取文件的修改时间。我从ls -l和cut开始,但stat(1)更直接 Git提交——date=" ' stat -c %y myfile ' " myfile

为了使提交看起来像过去完成的,你必须设置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

你想要的简单答案:

GIT_AUTHOR_DATE="2020-10-24T18:00:00 +0200" GIT_COMMITTER_DATE=$GIT_AUTHOR_DATE git commit

注意时区字符串,并为您的时区设置一个合适的字符串。即+0200,-0400