为什么没有任何修改时git修改警告你?

时间:2012-12-11 00:59:29

标签: git git-commit amend

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

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

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

2 个答案:

答案 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