正如标题所说:我想在
GitHub的提交标签中,我推送到
GitHub的所有提交都会显示推送的时间戳而不是提交的时间戳.
我使用了相当标准的工作流程:
<do some work>
git add -u
git commit -m "Message 1."
...
<do some work>
git add -u
git commit -m "Message N."
git push myrepo master
这使得所有N次提交都显示在GitHub中,这很好并且很好.但是也显示了提交的时间,我不喜欢.我更希望只显示最后一个(或推送)的时间戳.
最佳答案 GitHub推送时间
您推送的时间在GitHub API上永远可见.如果你想隐藏它,别无选择:使用cron作业.
提交数据时间
可以使用环境变量控制提交数据的提交时间:
GIT_COMMITTER_DATE=2000-01-01T00:00:00+0000 \
GIT_AUTHOR_DATE=2000-01-01T00:00:00+0000 \
git commit -m 'my message'
对于–amend,使用–date选项作为作者日期:How can one change the timestamp of an old commit in Git?
有no further time indications on the commit message object,这足以保护隐私.
您可能希望从post-commit钩子自动执行此操作,如:Can GIT_COMMITTER_DATE be customized inside a git hook?中所述
这是一个更高级的钩子,它使你的提交将在每天的午夜和increment by one second for every new commit开始.这使得提交按时间排序,同时仍然隐藏提交时间.
的.git /钩/提交后
#!/usr/bin/env bash
if [ -z "${GIT_COMMITTER_DATE:-}" ]; then
last_git_time="$(git log --date=format:'%H:%M:%S' --format='%ad' -n 1 --skip 1)"
last_git_date="$(git log --date=format:'%Y-%m-%d' --format='%ad' -n 1 --skip 1)"
today="$(date '+%Y-%m-%d')"
if [ "$last_git_date" = "$today" ]; then
new_time="${last_git_time}"
new_delta=' + 1 second'
else
new_time="00:00:00"
new_delta=
fi
d="$(date --date "${today}T${new_time}+0000${new_delta}" "+${today}T%H:%M:%S+0000")"
echo "$d"
GIT_COMMITTER_DATE="$d" git commit --amend --date "$d" --no-edit
fi
别忘了:
chmod +x .git/hooks/post-commit
测试了git 2.19,Ubuntu 18.04.
别忘了也处理:
> git rebase with a-rewrite hook:git rebase without changing commit timestamps
> git am with –committer-date-is-author-date,如Can GIT_COMMITTER_DATE be customized inside a git hook?所述
或者提交者日期仍然泄漏.
批量历史修改
这是一种方法,可以将现有范围内所有提交的提交时间修复为午夜,同时保持日期不变:
git-hide-time() (
first_commit="$1"
last_commit="${2:-HEAD}"
git filter-branch --env-filter '
d="$(echo "$GIT_COMMITTER_DATE" | sed "s/T.*//")T00:00:00+0000)"
export GIT_COMMITTER_DATE="$d"
export GIT_AUTHOR_DATE="$d"
' --force "${first_commit}~..${last_commit}"
)
另见:How can one change the timestamp of an old commit in Git?