我经常犯的错误是在提交后立即对文件进行更改,然后运行git commit --amend
然后快速git push -f origin master
显然,问题是我从来没有跑过git add foo.md
。所以我的修改实际上并没有修改我提交的任何代码。
问题是:为什么 git 在修改没有更改的提交时不警告您?更好的是,为什么它甚至可以成功完成?它只是在更改给定提交的时间戳时表现得像“触摸”吗?
我经常犯的错误是在提交后立即对文件进行更改,然后运行git commit --amend
然后快速git push -f origin master
显然,问题是我从来没有跑过git add foo.md
。所以我的修改实际上并没有修改我提交的任何代码。
问题是:为什么 git 在修改没有更改的提交时不警告您?更好的是,为什么它甚至可以成功完成?它只是在更改给定提交的时间戳时表现得像“触摸”吗?
提交者日期 ( %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
将始终重新创建一个新的提交,即使只是因为提交者日期正在更改。
修改对于仅更改提交消息或提交的其他详细信息很有用。因此,在不更改工作目录的情况下运行它很有意义。为了防止将来出现此类问题,我建议使用
git commit -a --amend