如何修改已存在但未推送的提交信息?的答案描述了一种方式,可以修改尚未向上游推送的先前提交的消息。 新消息继承原始提交的时间戳。这似乎很合理,但是否有一种方法也可以重新设置时间?
如何修改已存在但未推送的提交信息?的答案描述了一种方式,可以修改尚未向上游推送的先前提交的消息。 新消息继承原始提交的时间戳。这似乎很合理,但是否有一种方法也可以重新设置时间?
edit
选项。当变基过程停止以修改提交记录时,您可以键入如下命令:git commit --amend --date="Wed Feb 16 14:00 2011 +0100" --no-edit
顺带一提,--date=now
将使用当前时间。
之后,您可以继续进行交互式变基。
要更改提交日期而不是作者日期:
GIT_COMMITTER_DATE="Wed Feb 16 14:00 2011 +0100" git commit --amend --no-edit
上面的代码设置了一个环境变量GIT_COMMITTER_DATE
,用于修改提交。
所有内容均在Git Bash中进行测试。
rebase
操作,只需执行git commit --amend
命令即可。请注意,此操作将覆盖最近的提交。 - Eponymous使用带有 env 过滤器的 git filter-branch
命令,为你想要修复的特定提交哈希设置 GIT_AUTHOR_DATE
和 GIT_COMMITTER_DATE
。
这将使得该提交哈希及其后续所有哈希都无效。
示例:
如果您想要更改提交 119f9ecf58069b265ab22f1f97d2b648faf932e0
的日期,可以使用类似以下命令:
git filter-branch --env-filter \
'if [ $GIT_COMMIT = 119f9ecf58069b265ab22f1f97d2b648faf932e0 ]
then
export GIT_AUTHOR_DATE="Fri Jan 2 21:38:53 2009 -0800"
export GIT_COMMITTER_DATE="Sat May 19 01:01:01 2007 -0700"
fi'
处理所有建议的更好方法是使用一个命令
LC_ALL=C GIT_COMMITTER_DATE="$(date)" git commit --amend --no-edit --date "$(date)"
这将设置最新提交的提交时间和作者时间为“现在”。
LANG= GIT_COMMITTER_DATE="\
date`" git commit --amend --date "`date`"`。 - Michał Góral--date "now"
。Git >= 2 将会解释它。 - wisbucky$(date)
使用一个 Git 能够理解的格式,通过临时覆盖系统语言环境。 - pxeger只需执行git commit --amend --reset-author --no-edit
即可。对于旧的提交,您可以执行交互式变基并选择edit
来修改所需更改的提交日期。
git rebase -i <ref>
然后使用 --reset-author
和 --no-edit
修正提交以将作者日期更改为当前日期:
git commit --amend --reset-author --no-edit
最后,继续进行交互式变基:
git rebase --continue
--reset-author
是个不错的选择,它在git 1.6.6中推出(参考https://gitlog.wordpress.com/2010/01/13/git-1-6-6/)。 - Tim Abell--reset-author
命令将会重置作者和作者日期为当前时间。 - wisbucky--reset-author
命令也会重置CommitDate
。 - Hart Simha我为此编写了一个脚本和Homebrew包。 安装非常简单,您可以在GitHub的PotatoLabs/git-redate
页面找到它。
语法:
git redate -c 3
只需运行git redate
,你就能够在vim中编辑最近5个提交的所有日期(还有一个-c
选项用于选择回溯多少次提交,默认为5)。如果您有任何问题、评论或建议,请告诉我!
EDITOR
环境变量使其与所有编辑器兼容呢?(另外我使用的是 Linux,而非 Mac...) - ympostor每个提交都与两个日期相关联,即提交者日期和作者日期。您可以使用以下命令查看这些日期:
git log --format=fuller
如果您想更改最近6次提交的作者日期和提交者日期,您可以使用交互式变基:
git rebase -i HEAD~6
pick c95a4b7 Modification 1
pick 1bc0b44 Modification 2
pick de19ad3 Modification 3
pick c110e7e Modification 4
pick 342256c Modification 5
pick 5108205 Modification 6
# Rebase eadedca..5108205 onto eadedca (6 commands)
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
如果您想更改日期,对于所有提交,请将pick
替换为edit
(或只使用e
),然后保存并退出编辑器。
现在,您可以通过指定作者日期和提交者日期以ISO-8601格式修订每个提交:
GIT_COMMITTER_DATE="2017-10-08T09:51:07" git commit --amend --date="2017-10-08T09:51:07"
第一个日期是提交日期,第二个日期是作者日期。
然后使用以下命令前往下一个提交:
git rebase --continue
重复这个过程直到您修改完所有提交。使用 git status
检查您的进度。
git commit --amend --no-edit --date=2017-10-08T09:51:07
中使用--no-edit
可以保留旧的提交信息。 - Mariusz PawelskiGIT_COMMITTER_DATE
,以更改先前Git提交的时间戳:http://eddmann.com/posts/changing-the-timestamp-of-a-previous-git-commit/ - smihaelgit log --format=fuller
的出色答案以及能够在一个命令中更改两个日期的能力,这是一个很好的答案。 - John Leuenhagengit commit --amend --date="now"
其他答案不太方便编辑多个提交日期。我在几年后回到这个问题上来分享一种技巧。
要更改最后4次提交的日期:
git rebase -i HEAD~4
根据需要修改以下变基,插入exec
行以根据需要修改日期:
编辑重置变基如下,插入exec
行以根据需要修改日期:
pick 4ca564e Do something
exec git commit --amend --no-edit --date "1 Oct 2019 12:00:00 PDT"
pick 1670583 Add another thing
exec git commit --amend --no-edit --date "2 Oct 2019 12:00:00 PDT"
pick b54021c Add some tests
exec git commit --amend --no-edit --date "3 Oct 2019 12:00:00 PDT"
pick e8f6653 Fix the broken thing
exec git commit --amend --no-edit --date "4 Oct 2019 12:00:00 PDT"
如果您想在变基指令列表中看到原始提交日期(Git 2.6+):
git config --add rebase.instructionFormat "[%ai] %s"
然后你会看到类似于
pick 4f5a371f [2021-09-08 02:56:50 -0700] Add npm events
pick 67937227 [2021-09-09 03:05:42 -0700] Fixup
exec git commit --amend --no-edit --date "now"
。 - Andrew Richardsexec git commit --amend --reset-author --no-edit
。 - sziraqui在theosp的答案基础上,我编写了一个名为git-cdc
(表示更改日期提交)的脚本,并将其放置在PATH
中。
名称很重要:PATH
中出现git-xxx
后,您就可以键入:
git xxx
# here
git cdc ...
那个脚本是bash编写的,即使在Windows上也是如此(因为Git将从其msys环境中调用它)。
#!/bin/bash
# commit
# date YYYY-mm-dd HH:MM:SS
commit="$1" datecal="$2"
temp_branch="temp-rebasing-branch"
current_branch="$(git rev-parse --abbrev-ref HEAD)"
date_timestamp=$(date -d "$datecal" +%s)
date_r=$(date -R -d "$datecal")
if [[ -z "$commit" ]]; then
exit 0
fi
git checkout -b "$temp_branch" "$commit"
GIT_COMMITTER_DATE="$date_timestamp" GIT_AUTHOR_DATE="$date_timestamp" git commit --amend --no-edit --date "$date_r"
git checkout "$current_branch"
git rebase --autostash --committer-date-is-author-date "$commit" --onto "$temp_branch"
git branch -d "$temp_branch"
有了那个,你可以输入:
git cdc @~ "2014-07-04 20:32:45"
这将重置HEAD(@~
)之前的提交的作者/提交日期为指定日期。
git cdc @~ "2 days ago"
这将把 HEAD 前面的提交(@~
) 的作者/提交日期重置为相同的小时数,但是两天之前。
对于 OS X,您也可以安装 GNU
coreutils
(brew install coreutils
),将其添加到PATH
(PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
) 然后使用 "2 days ago
" 语法。
git cdc @~ "2014-07-04 20:32:45"
,否则它将无法识别时间,并且获取到的时间将是00:00:00(成为第三个参数)。 - peschübrew install coreutils
),将其添加到PATH(PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
),然后使用“2天前”的语法。 - Ilya Semenov2天前
”可以吗? - VonC在不需要交互式重置的情况下,批量修改多个提交记录的日期的更简洁、更方便的方法:
git rebase HEAD~4 --exec "git commit --amend --no-edit --date 'now'"
它会更改提交者和作者的日期。
git rebase origin/main --exec "git commit --amend --reset-author --no-edit"
。 - A1rPungit push -f -u origin bugfix
将其推送到远程分支并在Bitbucket页面上查看时,它仍然包含先前提交的日期。但是,这不仅限于此解决方案,其他解决方案也有相同的情况。看起来Git仍然在某个地方保留着以前的日期。 - ka3akAuthorDate
和 CommitDate
,可以使用 git log --pretty=fuller
命令显示,如 此处 所述。我猜 Bitbucket 显示的是 CommitDate
而不是 AuthorDate
。在这种情况下,我建议使用以下命令(其中 t
是您想要设置的日期):t='2017-09-01 12:34:56'; GIT_COMMITTER_DATE="$t" git commit --amend --no-edit --date="$t"
。此命令将更改 AuthorDate
和 CommitDate
。 - Pere Joan Martorellbugfix
分支时,执行了git checkout -b bugfix_copy; git reset bugfix; git rebase ...(更改提交日期); git push origin +bugfix_copy:bugfix
。在最后一个命令之后,即使是Bitbucket的页面也显示每个提交的当前时间。我之所以使用这种方法,还因为我想保留分支bugfix
,其提交日期不会改变。 - ka3akt='2023-06-01T13:12:04'; git rebase HEAD~2 --exec "GIT_COMMITTER_DATE='$t' git commit --amend --no-edit --date '$t'"
。将日期字符串替换为“now”或您想要使用的任何日期。 - Chrisuu
git commit --amend --reset-author
- Erick M. Sprengel