在不更改时间戳的情况下修改以前的提交
modify previous commit without changing timestamp
要修改之前的提交,我可以 运行 我的分阶段更改的提交
git commit --amend --no-edit
git push -f
提交已修改但提交的时间戳发生变化...
有没有办法不改变时间间隔?。类似于:
git commit --amend --no-edit --no-time-change
请注意 git commit --amend
不会 修改 提交;相反,它进行了 新的和改进的提交 并停止使用旧的和糟糕的。如果其他任何人或任何其他分支可以访问原始提交,这种区别很重要,因为他们不会切换到新的和改进的提交。新的提交有一个新的不同的哈希 ID;旧提交的所有用户都使用旧的哈希 ID,该哈希 ID 未更改。由于这些原因,日期更改这一事实通常并不重要。
也就是说:每个提交中有两个个时间戳:
- 作者日期,
- 提交者日期。
当使用git commit
时,有或没有--amend
,你可以使用--date=<whatever>
来指定作者日期,但是没有标志用于指定提交者日期。
幸运的是,您可以设置两个 环境变量 来覆盖提交者和作者日期。它们是 GIT_AUTHOR_DATE
和 GIT_COMMITTER_DATE
。他们接受 --date
接受的相同日期格式,例如 git show --pretty=fuller
显示两个日期。
使用 eval
(这通常有点危险)或 env
,我们可以让 sh/bash-compatible shell 作为一个人为我们做这件事-班轮:
eval $(git log --no-walk --format='GIT_AUTHOR_DATE="%ad" GIT_COMMITTER_DATE="%cd"') git commit --amend
或:
env GIT_AUTHOR_DATE="$(git log --no-walk --format=%ad)" GIT_COMMITTER_DATE="$(git log --no-walk --format=%cd)" git commit --amend
eval
方法稍微短一些,调用 git
的次数更少,但这意味着您必须注意命令本身。只要命令本身只是 git commit --amend
,整个事情就可以正常工作,所以你可以将其设为 Git 别名(记住前导 !
强制 Git 通过shell).
(如果愿意,请将 --no-walk
替换为 -1
。请注意,无论哪种方式,我们都依赖于没有起点的事实,git log
假设 HEAD
.)
要修改之前的提交,我可以 运行 我的分阶段更改的提交
git commit --amend --no-edit
git push -f
提交已修改但提交的时间戳发生变化...
有没有办法不改变时间间隔?。类似于:
git commit --amend --no-edit --no-time-change
请注意 git commit --amend
不会 修改 提交;相反,它进行了 新的和改进的提交 并停止使用旧的和糟糕的。如果其他任何人或任何其他分支可以访问原始提交,这种区别很重要,因为他们不会切换到新的和改进的提交。新的提交有一个新的不同的哈希 ID;旧提交的所有用户都使用旧的哈希 ID,该哈希 ID 未更改。由于这些原因,日期更改这一事实通常并不重要。
也就是说:每个提交中有两个个时间戳:
- 作者日期,
- 提交者日期。
当使用git commit
时,有或没有--amend
,你可以使用--date=<whatever>
来指定作者日期,但是没有标志用于指定提交者日期。
幸运的是,您可以设置两个 环境变量 来覆盖提交者和作者日期。它们是 GIT_AUTHOR_DATE
和 GIT_COMMITTER_DATE
。他们接受 --date
接受的相同日期格式,例如 git show --pretty=fuller
显示两个日期。
使用 eval
(这通常有点危险)或 env
,我们可以让 sh/bash-compatible shell 作为一个人为我们做这件事-班轮:
eval $(git log --no-walk --format='GIT_AUTHOR_DATE="%ad" GIT_COMMITTER_DATE="%cd"') git commit --amend
或:
env GIT_AUTHOR_DATE="$(git log --no-walk --format=%ad)" GIT_COMMITTER_DATE="$(git log --no-walk --format=%cd)" git commit --amend
eval
方法稍微短一些,调用 git
的次数更少,但这意味着您必须注意命令本身。只要命令本身只是 git commit --amend
,整个事情就可以正常工作,所以你可以将其设为 Git 别名(记住前导 !
强制 Git 通过shell).
(如果愿意,请将 --no-walk
替换为 -1
。请注意,无论哪种方式,我们都依赖于没有起点的事实,git log
假设 HEAD
.)