我经常错误地在提交后立即对文件进行更改,然后运行git commit --amend
,然后运行快速git push -f origin master
显然,问题是我从未跑过git add foo.md
。所以我的修改实际上没有修改我提交的任何代码。
问题是:为什么在修改没有更改的提交时git不警告你?更好的是,为什么它甚至成功完成?它只是在改变给定提交的时间戳时表现得像“触摸”吗?
答案 0 :(得分:3)
即使提交 author 日期(%ci
)保持不变,提交者日期(%ai
)仍会被重置:
例如,如果我提交--amend -no-edit Git repo上的最后一次提交,则作者日期保持不变,但我刚创建了一个 new 提交:用相同的内容替换旧的提交,但是不同的提交日期:
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。
来自Pro-Book:
- 作者是最初撰写作品的人,
- 而提交者是最后一次申请工作的人。
如果只是因为提交者日期正在改变,commit --amend
将始终重新创建新提交。
答案 1 :(得分:1)
修改对于仅更改提交消息或提交的其他详细信息非常有用。所以运行它而不改变工作目录很有意义。为了防止将来出现类似问题,我建议使用
git commit -a --amend