Re: Aborting "git commit --interactive" discards updates to index
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:52:44
demerphq [off-list ref] writes:
On 27 June 2011 17:59, Junio C Hamano [off-list ref] wrote:quoted
The latest feature release Git 1.7.6 is available at the usual places: http://www.kernel.org/pub/software/scm/git/[snip]quoted
* Aborting "git commit --interactive" discards updates to the index made during the interactive session.Hi, I am wondering why this change was made?
I wasn't directly involved in this particular part of the design of what
should happen to the index when a commit is aborted, so I would be a bad
person to give you the first answer, but let's try.
If a "commit" session is aborted, it is logical to revert whatever has
been done inside that session as a single logical unit, so I do not
particularly find the current behaviour so confusing. It might even make
more sense if we update "commit -i" and "commit -a" to also revert the
index modification when the command is aborted for consistency.
You are welcome to rehash the age old discussion, though. Personally I do
not care very deeply either way. I would never use "commit --interactive"
myself, and I would not encourage others to use it, either, even if we do
not worry about the behaviour when a commit is aborted.
One thread of interest (there are others, as this change was rerolled at
least a few times) may be
http://thread.gmane.org/gmane.comp.version-control.git/173033/focus=173035
Having said all that,...
.... I am writing this after spending about 45 minutes showing a colleague how to use git commit --interactive, when we realized that we had forgotten to add a file....
... if your partial commit is so complex that you need to spend 45 minutes to sift what to be commited and what to be left out, you are much better off to run "git add -i" to prepare the index, "git stash save -k" to check out what is to be committed (and stash away what are to be left out) so that you can make sure what you are committing is what you thought are committing (by asking "git diff" and "make test" for example), and after convincing yourself that you made a good state in the index, make a commit with "git commit" (without any other arguments) and conclude it with "git stash pop" to recover the changes that you decided to leave out. "commit --interactive" robs me from that crucial "verification" step, and that is why I wouldn't be a user or an advocate of this "misfeature". By the way, why did you draw Ævar into this discussion? I do not think he was involved in any way with the design or implementation of this command.