Re: [Qgit RFC] commit --amend
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:43:19
Jan Hudec [off-list ref] writes:
quoted
P.S: Why 'git-commit --amend -F' it's explicitely forbidden?
The reasoning goes like this (here, I am not particularly trying
to justify it, but am merely explaining the original reasoning
and intended use case as a historical background):
To amend means to remove the tip commit, replace with a new
one, possibly but not necessarily with a different tree from
the removed one.
Since you are "amending", the spirit of the commit you are
going to create, in order to replace the old one, ought to
be the same as the one being replaced.
- You may be only adding a change that you forgot to add
before making the previous commit (in which case your tree
is slightly different, but what you are going to say in
the commit log message is exactly the same), or
- you may found a typo in the commit log message and trying
to fix it (in which case your tree is identical but the
commit log message would be slightly different).
In either case, the resulting commit log message would be
very similar to the existing one, so the tool helps you by
letting re-use and re-edit the commit log message instead of
forcing you to re-type it.
There is no room for -F, -c, nor -m to make sense for these use
cases, and giving them to "commit --amend" is most likely a user
error, and diagnozed as such, because "commit --amend" is an
end-user level Porcelain program.
If you are popping one commit and replacing with a totally
**unrelated** commit, that is not what --amend is about. What
you are doing is "reset --soft HEAD^" followed by "add <something>"
followed by "commit".
At the mechanical level, you could argue that --amend is doing
the same thing. After all, that reset/add/commit sequence is
exactly what is done by --amend internally.
But if a Porcelain like StGIT or Qgit would want to do that kind
of operation for different use case than "amending", it can and
should use plumbing commands, just like the implementation of
"commit --amend" does, with different constraints and error
checks.