3

我经常犯的错误是在提交后立即对文件进行更改,然后运行git commit --amend然后快速git push -f origin master

显然,问题是我从来没有跑过git add foo.md。所以我的修改实际上并没有修改我提交的任何代码。

问题是:为什么 git 在修改没有更改的提交时不警告您?更好的是,为什么它甚至可以成功完成?它只是在更改给定提交的时间戳时表现得像“触摸”吗?

4

2 回答 2

3

提交者日期 ( %ci) 不断被重置,即使提交作者日期 ( %ai) 保持不变:
例如,如果我在 Git 存储库上提交 --amend -no-edit 最后一次提交,则作者日期保持不变,但我刚刚创建了一个的提交:用相同的内容替换旧的提交,但提交日期不同:

P:\git\git>git show -s --format="%ci" e0d6576639261beefb40afa52696d02f16c490ed
2012-12-11 03:42:23 +0100  <== just now

P:\git\git>git show -s --format="%ai" e0d6576639261beefb40afa52696d02f16c490ed
2012-12-07 14:18:55 -0800  <== original date when the author did commit

所以任何修改都会导致不同的SHA1。

来自专业书

  • 作者是最初撰写作品的人,
  • 而提交者是最后应用该工作的人。

Acommit --amend将始终重新创建一个新的提交,即使只是因为提交者日期正在更改。

于 2012-12-11T02:45:10.713 回答
1

修改对于仅更改提交消息或提交的其他详细信息很有用。因此,在不更改工作目录的情况下运行它很有意义。为了防止将来出现此类问题,我建议使用

git commit -a --amend
于 2012-12-11T11:21:12.637 回答