git commit – 设置时间戳到未来

我需要使用Git进行一些提交,但是我希望将来git-log中的时间戳。

我怎样才能在git中提交一个未来的时间戳在git-log中注册?

你应该等一下。

或者你可以这样做:

/tmp/x 604% env GIT_AUTHOR_DATE='Wed Dec 19 15:14:05 2029 -0800' git commit -m 'future!' [master]: created 6348548: "Future!" 1 files changed, 1 insertions(+), 0 deletions(-) /tmp/x 605% git log Author: Dustin Sallings <dustin@spy.net> Date: Wed Dec 19 15:14:05 2029 -0800 Future! 

请注意 ,有一个作者date和一个提交者date,所以一定要设置正确的(或两者)。

您可以修改提交,例如2037年:

 git commit --amend --date="Wed Feb 16 14:00 2037 +0100" 

我也尝试了2038年,但是当时我得到了一个值。

如果你想在将项目添加到git时保留一个实际的更改date,你可以这样做

 env GIT_AUTHOR_DATE="`ls -rt *.cpp|tail -1|xargs date -u -r`" git commit -m "Old sources retaining old change-dates of last changed file: `ls -rt *.cpp|tail -1`, actual commit date: `date`" 

这将提交上次更改的* .cpp文件的更改date,以及实际提交date的一个很好的解释消息。

通过结合雨果的答案( 1 )与这里find的信息( 2 ),并在某些sed折腾,我得到这样的:

 alias newest="find . -path ./.git -prune -o -type f -exec stat -c \"%y %n\" '{}' + | sort -r | head -1 | sed s#'.*\./'##" GIT_AUTHOR_DATE="$(newest | xargs date -u -r)" GIT_COMMITTER_DATE="$(newest | xargs date -u -r)" git commit -m "Old sources retaining old change-dates of last changed file: $(newest), actual commit date: $(date)" 

主要区别在于这个版本执行recursionsearch,因此您可以在树中的任何位置获取最新的文件 – 尽pipe它会故意跳过.git目录。

当然,你可能想在这里删除一个datevariables,而且我正在使用一个相当新的版本的bash(4.2.37(1)-release),所以$()表示法可能不适用于你用反引号(`)代替它)。

请问为什么要这样做?

如果你不想改变你的时钟,我会build议创build一个脚本来执行提交,并使用Windows调度器(或任何等同于你的操作系统)在你想要提交的时候运行脚本。