如何修改已存在但未推送的提交信息?的答案描述了一种方式,可以修改尚未向上游推送的先前提交的消息。 新消息继承原始提交的时间戳。这似乎很合理,但是否有一种方法也可以重新设置时间?
如何修改已存在但未推送的提交信息?的答案描述了一种方式,可以修改尚未向上游推送的先前提交的消息。 新消息继承原始提交的时间戳。这似乎很合理,但是否有一种方法也可以重新设置时间?
要同时更改作者日期和提交日期:
GIT_COMMITTER_DATE="Wed Sep 23 9:40 2015 +0200" git commit --amend --date "Wed Sep 23 9:40 2015 +0200"
npm install -g git-change-date
cd [your-directory]
git-change-date
您将被提示选择要修改的提交,然后输入新日期。
如果您想通过特定哈希更改提交,请运行此命令git-change-date --hash=[哈希值]
如果它是前一次最后提交。
git rebase -i HEAD~2
git commit --amend --date=now
如果您已经推送到远程仓库并且需要强制覆盖使用:
git push --force
如果你不能强制推送并且已经推送了,你就无法更改提交!
git commit --amend --date="12/31/2021 @ 14:00"
git rebase --committer-date-is-author-date HEAD^
- krubo# rewrite_commit_date(commit, date_timestamp)
#
# !! Commit has to be on the current branch, and only on the current branch !!
#
# Usage example:
#
# 1. Set commit 0c935403 date to now:
#
# rewrite_commit_date 0c935403
#
# 2. Set commit 0c935403 date to 1402221655:
#
# rewrite_commit_date 0c935403 1402221655
#
rewrite_commit_date () {
local commit="$1" date_timestamp="$2"
local date temp_branch="temp-rebasing-branch"
local current_branch="$(git rev-parse --abbrev-ref HEAD)"
if [[ -z "$date_timestamp" ]]; then
date="$(date -R)"
else
date="$(date -R --date "@$date_timestamp")"
fi
git checkout -b "$temp_branch" "$commit"
GIT_COMMITTER_DATE="$date" git commit --amend --date "$date"
git checkout "$current_branch"
git rebase "$commit" --onto "$temp_branch"
git branch -d "$temp_branch"
}
if [[ -z "$commit" ]]
-> if [[ -z "$date_timestamp" ]]
- blueFastGIT_COMMITTER_DATE=
,以防止进一步手动提交以保持指定的日期。 - scharette这里有一个方便的别名,可以将最后一次提交的提交时间和作者时间更改为date --date
接受的时间:
以下是翻译后的内容:
这里有一个方便的别名,可以将最后一次提交的提交时间和作者时间更改为date --date
接受的时间:
[alias]
cd = "!d=\"$(date -d \"$1\")\" && shift && GIT_COMMITTER_DATE=\"$d\" \
git commit --amend --date \"$d\""
用法:git cd <date_arg>
示例:
git cd now # update the last commit time to current time
git cd '1 hour ago' # set time to 1 hour ago
编辑: 这里有一个更自动化的版本,它检查索引是否干净(没有未提交的更改),并重复使用上一次提交消息,否则会失败(防范措施):
[alias]
cd = "!d=\"$(date -d \"$1\")\" && shift && \
git diff-index --cached --quiet HEAD --ignore-submodules -- && \
GIT_COMMITTER_DATE=\"$d\" git commit --amend -C HEAD --date \"$d\"" \
|| echo >&2 "error: date change failed: index not clean!"
2022年7月的信息:
这个可与当前时间戳完美配合使用:
git commit --amend --date=now --no-edit
还有这个例子-适用于任何日期格式:
git commit --amend --date="Mon Jul 25 10:37:36 2022 +0300" --no-edit
如果你想获取另一个提交的确切日期(比如你变基编辑了一个提交,想让它保留原来变基前的日期):
git commit --amend --date="$(git show -s --format=%ai a383243)"
此操作将修正 HEAD 提交的日期为提交记录 a383243 的日期,确保完全一致(如果有歧义,请包含更多数字)。它还会弹出编辑器窗口以便您可以编辑提交消息。
这是针对通常感兴趣的作者日期进行的操作 - 有关提交者日期的其他答案,请参见其他答案。
如果提交后还没有推送,则可以使用类似于以下的内容:
git commit --amend --date=" Wed Mar 25 10:05:44 2020 +0300"
之后Git Bash会打开编辑器,并且已经应用了日期,因此您只需要在VI编辑器命令模式下输入“:wq”以保存并推送它
git push -f
(强制更新)来推送更改的提交。但这可能会产生副作用。(特别是如果许多人有本地克隆库) - Antônio MedeirosGIT_COMMITTER_DATE="$(date)" git commit --amend --no-edit --date "$(date)"
GIT_COMMITTER_DATE="Mon 20 Aug 2018 20:19:19 BST" git commit --amend --no-edit --date "Mon 20 Aug 2018 20:19:19 BST"
回退到指定提交之前并暂停以进行修改:
git rebase <commit-hash>^ -i
pick
替换为 e
(edit):wq
)GIT_COMMITTER_DATE="$(date)" git commit --amend --no-edit --date "$(date)"
GIT_COMMITTER_DATE="星期一 2018年08月20日 20时19分19秒 BST" git commit --amend --no-edit --date "星期一 2018年08月20日 20时19分19秒 BST"
来源: https://codewithhugo.com/change-the-date-of-a-git-commit/
git commit --amend --reset-author
- Erick M. Sprengel