From: Michael J Gruber Date: Mon, 14 Jul 2008 15:01:08 GMT Subject: Re: git-rebase eats empty commits Message-ID: In-Reply-To: <20080712221207.GB22323@leksak.fem-net> Stephan Beyer venit, vidit, dixit 13.07.2008 00:12: > Hi, > > Michael J Gruber wrote: >> "git commit" allows empty commits with the "--allow-empty" option, i.e. >> commits which introduce no change at all. This is sometimes useful for >> keeping a log of untracked work related to tracked content. >> >> "git rebase" removes empty commits, for the good reason that rebasing >> may make certain commits obsolete; but I don't want that in the case >> mentioned above. Is there any way to specify "--preserve-empty" or >> similar? > > First I can speak for git-sequencer: there is no such thing as a > "preserve empty" option, but currently, when you are picking a commit > that has already been applied so that no changes occur, it will pause. > (It will not pause if it is a fast-forward.) > Yet, I was unsure if this is a "correct" behavior, but it seemed to be > useful, because you can inspect the situation. > > In my mind, the same should happen with an empty commit, so I tested it: > 1. It pauses. > 2. In that pause I only need to run "git commit --allow-empty" and I have > the picked empty patch with that commit message. > > So if this behavior is kept, there is no such need for such an option. > > Now I'm checking it with the old rebase-i (I'm always referring to > git-rebase--interactive as rebase-i) and exactly the same behavior > occurs. > > But rebase is not rebase-i. > So I've also checked both, pure rebase and rebase-m: then the empty commit > is lost. > > To sum up, use rebase -i and when it's pausing, do "git commit --allow-empty" > and then "git rebase --continue" and you have what you want. I assume this is with git from master? With git 1.5.6.2 rebase -i doesn't stop there, not even when I change "pick" to "edit"! So, I guess for now I'll use my hacked git-rebase ("-m", I didn't hack git-format-patch), maybe 1.6.0 will behave as described above. Anyway thanks for the hint about distinguishing between rebase and rebase -i. Michael