Git 为什么';如果有';没有什么可以修改的吗?

Git 为什么';如果有';没有什么可以修改的吗?,git,git-commit,git-amend,Git,Git Commit,Git Amend,我经常犯这样的错误:在提交后立即对文件进行更改,然后运行git commit--amend,然后执行快速git push-f origin master 显然,问题是我从未运行过git add foo.md。所以我的修正案实际上并没有修正我的任何承诺代码 问题是:为什么git在修改提交时不发出警告?更好的是,为什么它能成功完成?在更改给定提交的时间戳时,它的行为是否仅仅像“触摸”一样?提交者日期(%ci)会不断重置,即使提交者日期(%ai)保持不变: 例如,如果我提交--修改--不编辑Git r

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

显然,问题是我从未运行过
git add foo.md
。所以我的修正案实际上并没有修正我的任何承诺代码

问题是:为什么git在修改提交时不发出警告?更好的是,为什么它能成功完成?在更改给定提交的时间戳时,它的行为是否仅仅像“触摸”一样?

提交者日期(
%ci
)会不断重置,即使提交者日期(
%ai
)保持不变:
例如,如果我提交--修改--不编辑Git repo上的最后一次提交,作者日期保持不变,但我只是创建了一个新的提交:用相同的内容替换旧的提交,但提交日期不同:

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
P:\git\git>git show-s--format=“%ci”E0D657639261BEEFB40AFA52696D02F16C490ED
2012-12-11 03:42:23+0100 git show-s--format=“%ai”E0D657639261BEEFB40AFA52696D02F16C490ED

2012-12-07 14:18:55-0800Amend仅用于更改提交消息或提交的其他详细信息。因此,在不更改工作目录的情况下运行它非常有意义。为了防止将来出现类似的问题,我建议使用

git commit -a --amend