git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 5/8] rebase: introduce the --recreate-merges option

From
Sergey Organov <sorganov@gmail.com>
Date
Feb 13, 2018, 06:43 UTC
Message-ID
<87d1198k4e.fsf@javad.com>
In-Reply-To
<nycvar.QRO.7.76.6.1802122121230.35@ZVAVAG-6OXH6DA.rhebcr.pbec.zvpebfbsg.pbz>
Hi Johannes,
Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
Show 36 quoted lines
> Hi Sergey,
>
> On Mon, 12 Feb 2018, Sergey Organov wrote:
>
>> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
>> >
>> > On Fri, 9 Feb 2018, Sergey Organov wrote:
>> >
>> >> Johannes Schindelin <johannes.schindelin@gmx.de> writes:
>> >> 
>> >> [...]
>> >> 
>> >> > With this patch, the goodness of the Git garden shears comes to `git
>> >> > rebase -i` itself. Passing the `--recreate-merges` option will generate
>> >> > a todo list that can be understood readily, and where it is obvious
>> >> > how to reorder commits. New branches can be introduced by inserting
>> >> > `label` commands and calling `merge - <label> <oneline>`. And once this
>> >> > mode has become stable and universally accepted, we can deprecate the
>> >> > design mistake that was `--preserve-merges`.
>> >> 
>> >> This doesn't explain why you introduced this new --recreate-merges. Why
>> >> didn't you rather fix --preserve-merges to generate and use new todo
>> >> list format?
>> >
>> > Because that would of course break existing users of
>> > --preserve-merges.
>> 
>> How exactly?
>
> Power users of interactive rebase use scripting to augment Git's
> functionality. One particularly powerful trick is to override
> GIT_SEQUENCER_EDITOR with an invocation of such a script, to perform
> automated edits. Such a script breaks when we change the format of the
> content to edit. If we change the format of the todo list generated in
> --preserve-merges mode, that is exactly what happens. We break existing
> users.

I didn't say a word against "--preserve-merges mode", whatever it is, only about re-using "--preserve-merges" command-line option to "git rebase", the git user interface. I'm sure you see the difference? Unless there are out-of-git scripts that do use "git rebase --preserve-merges" and simultaneously do rely on the todo list format this exact command generates, there should be no breakage of existing users caused by changing todo list format generated by "git rebase --preserve-merges".

Old broken "--preserve-merges mode" could be then kept in the implementation for ages, unused by the new fixed "git rebase --preserve-merge", for the sake of compatibility.

> BTW it seems that you did not really read my previous reply carefully
> because I referenced such a use case: the Git garden shears.

I thought I did. You confirm below that this script doesn't use "git rebase --preserve-merges" in the first place, nor will it break if "git rebase --preserve-merges" starts to generate new todo format, yet you expected I'd readily see how it's relevant? No, I'm not that clever, nor am I a mind-reader.

Show 7 quoted lines
> They do override the sequencer editor, and while they do not exactly
> edit the todo list (they simply through the generated one away), they
> generate a new todo list and would break if that format changes. Of
> course, the shears do not use the --preserve-merges mode,
> but from just reading about the way how the Git garden shears work, it
> is quite obvious how similar users of --preserve-merges are likely to
> exist?

Maybe, I dunno. If even "garden shears" won't break, then what will? Do you know an example?

Anyway, as it seems it's too late already for such a change, let me stop this and assume there are indeed such scripts that will break and that it's indeed a good idea to introduce new option. Case closed. The manual should still be fixed though, I think.

Show 5 quoted lines
>> Doesn't "--recreate-merges" produce the same result as
>> "--preserve-merges" if run non-interactively?
>
> The final result of a rebase where you do not edit the todo list? Should
> be identical, indeed.
That's good to hear.
> But that is the most boring, most uninteresting, and least important use
> case.
For you. Do you suddenly stop caring about compatibility?
> So we might just as well forget about it when we focus on keeping
> Git's usage stable.

Why? It's good it behaves the same, so --preserve-merges could indeed be deprecated, as you apparently intend.

Show 26 quoted lines
>> > So why not --preserve-merges=v2? Because that would force me to
>> > maintain --preserve-merges forever. And I don't want to.
>> >
>> >> It doesn't seem likely that todo list created by one Git version is
>> >> to be ever used by another, right?
>> >
>> > No. But by scripts based on `git rebase -p`.
>> >
>> >> Is there some hidden reason here? Some tools outside of Git that use
>> >> old todo list format, maybe?
>> >
>> > Exactly.
>> >
>> > I did mention such a tool: the Git garden shears:
>> >
>> > 	https://github.com/git-for-windows/build-extra/blob/master/shears.sh
>> >
>> > Have a look at it. It will inform the discussion.
>> 
>> I've searched for "-p" in the script, but didn't find positives for
>> either "-p" or "--preserve-merges". How it would break if it doesn't use
>> them? What am I missing?
>
> *This* particular script does not use -p.
>
> But it is not *this* particular script that I do not want to break!

I thought that was an example of a tool that would break. Well, it won't break. Good.

> It is *all* scripts that use interactive rebase!

I'm really interested, and here I *do* ask for education. What are those? As I now only ask this out of curiosity, and don't argue --recreate-merges anymore, are you finally willing to reveal the information?

> Don't you also care about not breaking existing users?

I do care. I just suspected they are very unlikely to exist, and I do want to be educated in this matter indeed, as they could be rather interesting.

[Please notice violation of your own standard of not using "Don't you...", not that I care myself.]

Show 21 quoted lines
>> >> Then, if new option indeed required, please look at the resulting manual:
>> >> 
>> >> --recreate-merges::
>> >> 	Recreate merge commits instead of flattening the history by replaying
>> >> 	merges. Merge conflict resolutions or manual amendments to merge
>> >> 	commits are not preserved.
>> >> 
>> >> -p::
>> >> --preserve-merges::
>> >> 	Recreate merge commits instead of flattening the history by replaying
>> >> 	commits a merge commit introduces. Merge conflict resolutions or manual
>> >> 	amendments to merge commits are not preserved.
>> >
>> > As I stated in the cover letter, there are more patches lined up after
>> > this patch series.
>> 
>> Good, but I thought this one should better be self-consistent anyway.
>> What if those that come later aren't included?
>
> Right, let's just rip apart the partial progress because the latter
> patches might not make it in?
No, let's fix it instead.
Show 5 quoted lines
>
> I cannot work on that basis, and I also do not want to work on that basis.
>
> If you do not like how the documentation is worded, fine, suggest a better
> alternative.

I suggested to re-use --preserve-merges command-line option to "git rebase", unless there are actual users that would break. But as you believe that's wrong idea, then it could be something like this in the manual:

--recreate-merges::
	Recreate merge commits instead of flattening the history. Merge
	conflict resolutions or manual amendments to merge commits are
	not preserved. 
-p::
--preserve-merges::
	This option is similar to --recreate-merges, but doesn't
        support interactive mode properly. This option is deprecated,
        use --recreate-merges instead.
Show 10 quoted lines
>
>> > Have a look at https://github.com/git/git/pull/447, especially the
>> > latest commit in there which is an early version of the deprecation I
>> > intend to bring about.
>> 
>> You shouldn't want a deprecation at all should you have re-used
>> --preserve-merges in the first place, and I still don't see why you
>> haven't. 
>
> Keep repeating it, and it won't become truer.

It is just my point that I repeat, and you gave no evidence it is false, so I assume it's true, unless proved otherwise.

[...]
Show 5 quoted lines
> Or for that matter like the design you proposed, to use --first-parent for
> --recreate-merges. Or to use --first-parent for some --recreate-merges,
> surprising users in very bad ways when it is not used (or when it is
> used). I get the impression that you still think it would be a good idea,
> even if it should be obvious that it is not.

What you describe here is bad idea indeed, but it has little to do with what I actually have in mind and what you apparently don't want to even try to understand.

Show 10 quoted lines
>> > Also, please refrain from saying things like... "Don't you think ..."
>> >
>> > If you don't like the wording, I wold much more appreciate it if a better
>> > alternative was suggested.
>> 
>> Sorry, but how can I suggest one if I don't understand what you are
>> doing here in the first place? That's why I ask you.
>
> There are ways to put the person you ask on trial. And there are ways to
> genuinely show interest and seek education.

I didn't seek education, nor did I intend any trial. I asked for clarification of the patch to the manual page that you wrote in a way that made resulting manual page confusing for me. Confusing manual is often indication of some additional problem(s) elsewhere, that's what I've learned for sure, from multiple occasions, so I did reveal my doubts.

Show 26 quoted lines
> I am a really poor example how to communicate properly, of course, so
> don't try to learn from me. I am trying myself to learn better ways to
> express what I mean clearly, and to express it in a direct yet kind
> manner.
>
>> >> Don't you think more explanations are needed there in the manual on
>> >> why do we have 2 separate options with almost the same yet subtly
>> >> different description? Is this subtle difference even important? How?
>> >> 
>> >> I also have trouble making sense of "Recreate merge commits instead of
>> >> flattening the history by replaying merges." Is it "<Recreate merge
>> >> commits by replaying merges> instead of <flattening the history>" or is it
>> >> rather "<Recreate merge commits> instead of <flattening the history by
>> >> replaying merges>?
>> >
>> > The documentation of the --recreate-merges option is not meant to explain
>> > the difference to --preserve-merges. It is meant to explain the difference
>> > to regular `git rebase -i`, which flattens the commit history into a
>> > single branch without merge commits (in fact, all merge commits are simply
>> > ignored).
>> 
>> Yeah, that's obvious, but the point is that resulting manual is ended
>> up being confusing.
>
> Again, just saying something is bad, is bad. Saying something leaves room
> for improvement and then suggesting how to improve it, is good.
Please see wording suggestion above.
Show 10 quoted lines
>> > And I would rather not start to describe the difference between
>> > --recreate-merges and --preserve-merges because I want to deprecate the
>> > latter, and describing the difference as I get the sense is your wish
>> > would simply mean more work because it would have to be added and then
>> > removed again.
>> 
>> I suspect you actually didn't need those new option in the first place,
>> and that's the core reason of these troubles.
>
> Are you suspecting that I, myself, do not use --recreate-merges?

I suspect that if you've had rather changed --preserve-merges, you'd happily use it and no --recreate-merges were ever necessary. You did what you did, and it seems to be too late to ask for changing it back, exactly due to heavy use of this new option.

Show 14 quoted lines
> If so, please read the cover letter again, in particular the part where I
> describe how this entire series of patch series arose from the Git garden
> shears, which I invented myself to help with maintaining Git for Windows,
> and which I use for five years now. This should help disperse that
> suspicion rather quickly: the intent of --recreate-merges is to allow me
> to simplify the shears by quite a bit, and maybe eventually even get rid
> of the script altogether (if I ever manage to convince myself that the
> concept of a merging-rebase should be official enough to enter core Git).
>
> I am a heavy user of --recreate-merges, even if it does not really exist
> yet. I have five years of experience with it, which is the reason why I am
> so confident about its design, and why I can tell you a lot about typical
> use cases and common pitfalls, and where the original design had to be
> adjusted.

I fail to see how anything of the above would change should --recreate-merges be still called --preserve-merges, but I do see why you don't want that to happen now, so please only consider fixing of the manual page.

-- Sergey
Previous: Johannes SchindelinNext: Johannes Schindelin
Message 85 of 412 in “rebase -i: offer to recreate merge commits”
  1. 0/8 rebase -i: offer to recreate merge commitsJohannes Schindelin, Jan 18, 2018
  2. 1/8 sequencer: introduce new commands to reset the revisionJohannes Schindelin, Jan 18, 2018
  3. Jacob KellerJan 18, 2018
  4. Johannes SchindelinJan 18, 2018
  5. Jacob KellerJan 18, 2018
  6. Philip OakleyJan 18, 2018
  7. Jacob KellerJan 18, 2018
  8. Johannes SchindelinJan 29, 2018
  9. Junio C HamanoJan 22, 2018
  10. Johannes SchindelinJan 29, 2018
  11. Eric SunshineJan 19, 2018
  12. Junio C HamanoJan 24, 2018
  13. Johannes SchindelinJan 29, 2018
  14. Johannes SchindelinJan 29, 2018
  15. Eric SunshineJan 30, 2018
  16. Phillip WoodJan 19, 2018
  17. Phillip WoodJan 19, 2018
  18. Jacob KellerJan 19, 2018
  19. Johannes SchindelinJan 29, 2018
  20. Johannes SchindelinJan 29, 2018
  21. Johannes SchindelinJan 29, 2018
  22. 2/8 sequencer: introduce the `merge` commandJohannes Schindelin, Jan 18, 2018
  23. Jacob KellerJan 18, 2018
  24. Johannes SchindelinJan 18, 2018
  25. Jacob KellerJan 18, 2018
  26. Eric SunshineJan 19, 2018
  27. Phillip WoodJan 19, 2018
  28. Jacob KellerJan 20, 2018
  29. Johannes SchindelinJan 29, 2018
  30. Johannes SchindelinJan 31, 2018
  31. Phillip WoodJan 31, 2018
  32. Jacob KellerFeb 1, 2018
  33. Junio C HamanoJan 22, 2018
  34. Johannes SchindelinJan 29, 2018
  35. 3/8 sequencer: fast-forward merge commits, if possibleJohannes Schindelin, Jan 18, 2018
  36. Phillip WoodJan 19, 2018
  37. Junio C HamanoJan 23, 2018
  38. Phillip WoodJan 24, 2018
  39. Junio C HamanoJan 24, 2018
  40. Johannes SchindelinJan 29, 2018
  41. Junio C HamanoJan 23, 2018
  42. Johannes SchindelinJan 29, 2018
  43. 4/8 rebase-helper --make-script: introduce a flag to recreate mergesJohannes Schindelin, Jan 18, 2018
  44. Philip OakleyJan 18, 2018
  45. Eric SunshineJan 19, 2018
  46. Junio C HamanoJan 23, 2018
  47. Johannes SchindelinJan 29, 2018
  48. Johannes SchindelinJan 29, 2018
  49. Junio C HamanoJan 23, 2018
  50. Johannes SchindelinJan 29, 2018
  51. 5/8 rebase: introduce the --recreate-merges optionJohannes Schindelin, Jan 18, 2018
  52. Eric SunshineJan 19, 2018
  53. Johannes SchindelinJan 29, 2018
  54. Junio C HamanoJan 23, 2018
  55. Johannes SchindelinFeb 10, 2018
  56. Sergey OrganovFeb 7, 2018
  57. Jacob KellerFeb 7, 2018
  58. Sergey OrganovFeb 7, 2018
  59. Johannes SixtFeb 7, 2018
  60. Johannes SchindelinFeb 7, 2018
  61. Øyvind RønningstadFeb 7, 2018
  62. Junio C HamanoFeb 7, 2018
  63. Johannes SchindelinFeb 8, 2018
  64. Sergey OrganovFeb 14, 2018
  65. Sergey OrganovFeb 9, 2018
  66. Johannes SixtFeb 9, 2018
  67. Jacob KellerFeb 11, 2018
  68. Sergey OrganovFeb 12, 2018
  69. Sergey OrganovFeb 9, 2018
  70. Johannes SchindelinFeb 10, 2018
  71. Sergey OrganovFeb 12, 2018
  72. Johannes SchindelinFeb 12, 2018
  73. Sergey OrganovFeb 13, 2018
  74. Johannes SchindelinFeb 15, 2018
  75. Sergey OrganovFeb 15, 2018
  76. Johannes SchindelinFeb 15, 2018
  77. Sergey OrganovFeb 12, 2018
  78. Johannes SchindelinFeb 12, 2018
  79. Jacob KellerFeb 13, 2018
  80. Sergey OrganovFeb 13, 2018
  81. Jacob KellerFeb 14, 2018
  82. Johannes SchindelinFeb 15, 2018
  83. Sergey OrganovFeb 15, 2018
  84. Johannes SchindelinFeb 15, 2018
  85. Sergey OrganovFeb 13, 2018
  86. Johannes SchindelinFeb 15, 2018
  87. 6/8 sequencer: handle autosquash and post-rewrite for merge commandsJohannes Schindelin, Jan 18, 2018
  88. Jacob KellerJan 18, 2018
  89. Johannes SchindelinJan 18, 2018
  90. Jacob KellerJan 18, 2018
  91. Junio C HamanoJan 23, 2018
  92. 7/8 pull: accept --rebase=recreate to recreate the branch topologyJohannes Schindelin, Jan 18, 2018
  93. 8/8 rebase -i: introduce --recreate-merges=no-rebase-cousinsJohannes Schindelin, Jan 18, 2018
  94. Philip OakleyJan 18, 2018
  95. Johannes SchindelinJan 29, 2018
  96. Eric SunshineJan 20, 2018
  97. Jacob KellerJan 18, 2018
  98. 10/8 interactive rebase feedbackStefan Beller, Jan 18, 2018
  99. 9/8 [DO NOT APPLY, but squash?] git-rebase--interactive: clarify argumentsStefan Beller, Jan 18, 2018
  100. Jacob KellerJan 18, 2018
  101. Johannes SchindelinJan 18, 2018
  102. Stefan BellerJan 18, 2018
  103. Junio C HamanoJan 19, 2018
  104. Jacob KellerJan 20, 2018
  105. Johannes SchindelinJan 29, 2018
  106. 10/8 [DO NOT APPLY, but improve?] rebase--interactive: introduce "stop" commandStefan Beller, Jan 18, 2018
  107. Jacob KellerJan 18, 2018
  108. Philip OakleyJan 18, 2018
  109. Jacob KellerJan 18, 2018
  110. Johannes SchindelinJan 18, 2018
  111. Stefan BellerJan 18, 2018
  112. Junio C HamanoJan 19, 2018
  113. Johannes SchindelinJan 29, 2018
  114. Junio C HamanoJan 23, 2018
  115. Johannes SchindelinJan 29, 2018
  116. 00/10 rebase -i: offer to recreate merge commitsJohannes Schindelin, Jan 29, 2018
  117. 01/10 git-rebase--interactive: clarify argumentsJohannes Schindelin, Jan 29, 2018
  118. 03/10 sequencer: introduce the `merge` commandJohannes Schindelin, Jan 29, 2018
  119. 02/10 sequencer: introduce new commands to reset the revisionJohannes Schindelin, Jan 29, 2018
  120. Eric SunshineJan 30, 2018
  121. Johannes SchindelinFeb 10, 2018
  122. Stefan BellerJan 30, 2018
  123. Johannes SchindelinJan 31, 2018
  124. Phillip WoodJan 31, 2018
  125. Johannes SchindelinFeb 10, 2018
  126. 04/10 sequencer: fast-forward merge commits, if possibleJohannes Schindelin, Jan 29, 2018
  127. 05/10 rebase-helper --make-script: introduce a flag to recreate mergesJohannes Schindelin, Jan 29, 2018
  128. 07/10 sequencer: make refs generated by the `label` command worktree-localJohannes Schindelin, Jan 29, 2018
  129. 06/10 rebase: introduce the --recreate-merges optionJohannes Schindelin, Jan 29, 2018
  130. 08/10 sequencer: handle autosquash and post-rewrite for merge commandsJohannes Schindelin, Jan 29, 2018
  131. 09/10 pull: accept --rebase=recreate to recreate the branch topologyJohannes Schindelin, Jan 29, 2018
  132. 10/10 rebase -i: introduce --recreate-merges=[no-]rebase-cousinsJohannes Schindelin, Jan 29, 2018
  133. Stefan BellerJan 30, 2018
  134. Johannes SchindelinJan 31, 2018
  135. Junio C HamanoJan 30, 2018
  136. Johannes SchindelinJan 31, 2018
  137. Jacob KellerFeb 1, 2018
  138. 00/12 rebase -i: offer to recreate merge commitsJohannes Schindelin, Feb 11, 2018
  139. 01/12 sequencer: avoid using errno clobbered by rollback_lock_file()Johannes Schindelin, Feb 11, 2018
  140. 02/12 sequencer: make rearrange_squash() a bit more obviousJohannes Schindelin, Feb 11, 2018
  141. 03/12 git-rebase--interactive: clarify argumentsJohannes Schindelin, Feb 11, 2018
  142. 04/12 sequencer: introduce new commands to reset the revisionJohannes Schindelin, Feb 11, 2018
  143. Eric SunshineFeb 12, 2018
  144. Johannes SchindelinFeb 12, 2018
  145. 05/12 sequencer: introduce the `merge` commandJohannes Schindelin, Feb 11, 2018
  146. Eric SunshineFeb 12, 2018
  147. Johannes SchindelinFeb 12, 2018
  148. 06/12 sequencer: fast-forward merge commits, if possibleJohannes Schindelin, Feb 11, 2018
  149. 07/12 rebase-helper --make-script: introduce a flag to recreate mergesJohannes Schindelin, Feb 11, 2018
  150. 08/12 rebase: introduce the --recreate-merges optionJohannes Schindelin, Feb 11, 2018
  151. 09/12 sequencer: make refs generated by the `label` command worktree-localJohannes Schindelin, Feb 11, 2018
  152. 10/12 sequencer: handle post-rewrite for merge commandsJohannes Schindelin, Feb 11, 2018
  153. 11/12 pull: accept --rebase=recreate to recreate the branch topologyJohannes Schindelin, Feb 11, 2018
  154. 12/12 rebase -i: introduce --recreate-merges=[no-]rebase-cousinsJohannes Schindelin, Feb 11, 2018
  155. 00/12 rebase -i: offer to recreate merge commitsJohannes Schindelin, Feb 23, 2018
  156. 01/12 sequencer: avoid using errno clobbered by rollback_lock_file()Johannes Schindelin, Feb 23, 2018
  157. 02/12 sequencer: make rearrange_squash() a bit more obviousJohannes Schindelin, Feb 23, 2018
  158. 04/12 sequencer: introduce new commands to reset the revisionJohannes Schindelin, Feb 23, 2018
  159. 03/12 git-rebase--interactive: clarify argumentsJohannes Schindelin, Feb 23, 2018
  160. 05/12 sequencer: introduce the `merge` commandJohannes Schindelin, Feb 23, 2018
  161. 06/12 sequencer: fast-forward merge commits, if possibleJohannes Schindelin, Feb 23, 2018
  162. 07/12 rebase-helper --make-script: introduce a flag to recreate mergesJohannes Schindelin, Feb 23, 2018
  163. 08/12 rebase: introduce the --recreate-merges optionJohannes Schindelin, Feb 23, 2018
  164. 09/12 sequencer: make refs generated by the `label` command worktree-localJohannes Schindelin, Feb 23, 2018
  165. 10/12 sequencer: handle post-rewrite for merge commandsJohannes Schindelin, Feb 23, 2018
  166. 11/12 pull: accept --rebase=recreate to recreate the branch topologyJohannes Schindelin, Feb 23, 2018
  167. 12/12 rebase -i: introduce --recreate-merges=[no-]rebase-cousinsJohannes Schindelin, Feb 23, 2018
  168. Jacob KellerFeb 25, 2018
  169. Johannes SchindelinFeb 26, 2018
  170. 00/12 rebase -i: offer to recreate merge commitsJohannes Schindelin, Feb 26, 2018
  171. 01/12 sequencer: avoid using errno clobbered by rollback_lock_file()Johannes Schindelin, Feb 26, 2018
  172. Martin ÅgrenFeb 27, 2018
  173. Johannes SchindelinMar 2, 2018
  174. 03/12 git-rebase--interactive: clarify argumentsJohannes Schindelin, Feb 26, 2018
  175. 04/12 sequencer: introduce new commands to reset the revisionJohannes Schindelin, Feb 26, 2018
  176. 05/12 sequencer: introduce the `merge` commandJohannes Schindelin, Feb 26, 2018
  177. 07/12 rebase-helper --make-script: introduce a flag to recreate mergesJohannes Schindelin, Feb 26, 2018
  178. 06/12 sequencer: fast-forward merge commits, if possibleJohannes Schindelin, Feb 26, 2018
  179. 08/12 rebase: introduce the --recreate-merges optionJohannes Schindelin, Feb 26, 2018
  180. 09/12 sequencer: make refs generated by the `label` command worktree-localJohannes Schindelin, Feb 26, 2018
  181. 10/12 sequencer: handle post-rewrite for merge commandsJohannes Schindelin, Feb 26, 2018
  182. 11/12 pull: accept --rebase=recreate to recreate the branch topologyJohannes Schindelin, Feb 26, 2018
  183. 12/12 rebase -i: introduce --recreate-merges=[no-]rebase-cousinsJohannes Schindelin, Feb 26, 2018
  184. 02/12 sequencer: make rearrange_squash() a bit more obviousJohannes Schindelin, Feb 26, 2018
  185. Igor DjordjevicMar 6, 2018
  186. Johannes SchindelinMar 7, 2018
  187. 00/15 rebase -i: offer to recreate commit topologyJohannes Schindelin, Apr 10, 2018
  188. 02/15 sequencer: make rearrange_squash() a bit more obviousJohannes Schindelin, Apr 10, 2018
  189. 01/15 sequencer: avoid using errno clobbered by rollback_lock_file()Johannes Schindelin, Apr 10, 2018
  190. 03/15 git-rebase--interactive: clarify argumentsJohannes Schindelin, Apr 10, 2018
  191. 04/15 sequencer: introduce new commands to reset the revisionJohannes Schindelin, Apr 10, 2018
  192. Sergey OrganovApr 11, 2018
  193. Johannes SchindelinApr 11, 2018
  194. Sergey OrganovApr 11, 2018
  195. Phillip WoodApr 13, 2018
  196. Philip OakleyApr 15, 2018
  197. Phillip WoodApr 18, 2018
  198. 05/15 sequencer: introduce the `merge` commandJohannes Schindelin, Apr 10, 2018
  199. Phillip WoodApr 13, 2018
  200. Phillip WoodApr 13, 2018
  201. Johannes SchindelinApr 14, 2018
  202. Phillip WoodApr 18, 2018
  203. Johannes SchindelinApr 19, 2018
  204. 06/15 sequencer: fast-forward `merge` commands, if possibleJohannes Schindelin, Apr 10, 2018
  205. 07/15 rebase-helper --make-script: introduce a flag to rebase mergesJohannes Schindelin, Apr 10, 2018
  206. 08/15 rebase: introduce the --rebase-merges optionJohannes Schindelin, Apr 10, 2018
  207. 09/15 rebase --rebase-merges: add test for --keep-emptyJohannes Schindelin, Apr 10, 2018
  208. 10/15 sequencer: make refs generated by the `label` command worktree-localJohannes Schindelin, Apr 10, 2018
  209. 12/15 rebase --rebase-merges: avoid "empty merges"Johannes Schindelin, Apr 10, 2018
  210. 13/15 pull: accept --rebase=merges to recreate the branch topologyJohannes Schindelin, Apr 10, 2018
  211. 14/15 rebase -i: introduce --rebase-merges=[no-]rebase-cousinsJohannes Schindelin, Apr 10, 2018
  212. Sergey OrganovApr 12, 2018
  213. 15/15 rebase -i --rebase-merges: add a section to the man pageJohannes Schindelin, Apr 10, 2018
  214. Martin ÅgrenApr 10, 2018
  215. Johannes SchindelinApr 10, 2018
  216. Phillip WoodApr 11, 2018
  217. Eric SunshineApr 11, 2018
  218. Johannes SchindelinApr 12, 2018
  219. Phillip WoodApr 13, 2018
  220. Johannes SchindelinApr 12, 2018
  221. Jacob KellerApr 12, 2018
  222. Phillip WoodApr 13, 2018
  223. Sergey OrganovApr 12, 2018
  224. 11/15 sequencer: handle post-rewrite for merge commandsJohannes Schindelin, Apr 10, 2018
  225. Sergey OrganovApr 10, 2018
  226. Johannes SchindelinApr 10, 2018
  227. Sergey OrganovApr 11, 2018
  228. Johannes SchindelinApr 11, 2018
  229. Sergey OrganovApr 11, 2018
  230. Johannes SchindelinApr 11, 2018
  231. Sergey OrganovApr 12, 2018
  232. Johannes SchindelinApr 12, 2018
  233. Jacob KellerApr 11, 2018
  234. Sergey OrganovApr 12, 2018
  235. Jacob KellerApr 12, 2018
  236. Johannes SchindelinApr 12, 2018
  237. Jacob KellerApr 12, 2018
  238. Johannes SchindelinApr 13, 2018
  239. Phillip WoodApr 13, 2018
  240. Johannes SchindelinApr 13, 2018
  241. Sergey OrganovApr 19, 2018
  242. Jacob KellerApr 19, 2018
  243. Sergey OrganovApr 19, 2018
  244. Johannes SchindelinApr 20, 2018
  245. Jacob KellerApr 20, 2018
  246. Sergey OrganovApr 18, 2018
  247. 00/17 rebase -i: offer to recreate commit topologyJohannes Schindelin, Apr 19, 2018
  248. 01/17 sequencer: avoid using errno clobbered by rollback_lock_file()Johannes Schindelin, Apr 19, 2018
  249. 02/17 sequencer: make rearrange_squash() a bit more obviousJohannes Schindelin, Apr 19, 2018
  250. 03/17 sequencer: refactor how original todo list lines are accessedJohannes Schindelin, Apr 19, 2018
  251. 04/17 sequencer: offer helpful advice when a command was rescheduledJohannes Schindelin, Apr 19, 2018
  252. 05/17 git-rebase--interactive: clarify argumentsJohannes Schindelin, Apr 19, 2018
  253. 06/17 sequencer: introduce new commands to reset the revisionJohannes Schindelin, Apr 19, 2018
  254. Phillip WoodApr 20, 2018
  255. Johannes SchindelinApr 20, 2018
  256. 07/17 # This is a combination of 2 commits. # This is the 1st commit message:Johannes Schindelin, Apr 19, 2018
  257. Eric SunshineApr 20, 2018
  258. Johannes SchindelinApr 20, 2018
  259. 0/4 rebase -i: avoid stale "# This is a combination of" in commit messagesJohannes Schindelin, Apr 20, 2018
  260. 1/4 rebase -i: demonstrate bugs with fixup!/squash! commit messagesJohannes Schindelin, Apr 20, 2018
  261. 2/4 rebase -i: Handle "combination of <n> commits" with GETTEXT_POISONJohannes Schindelin, Apr 20, 2018
  262. Stefan BellerApr 20, 2018
  263. Johannes SchindelinApr 21, 2018
  264. 3/4 sequencer: leave a tell-tale when a fixup/squash failedJohannes Schindelin, Apr 20, 2018
  265. Stefan BellerApr 20, 2018
  266. Johannes SchindelinApr 21, 2018
  267. 4/4 rebase --skip: clean up commit message after a failed fixup/squashJohannes Schindelin, Apr 20, 2018
  268. 0/4 rebase -i: avoid stale "# This is a combination of" in commit messagesJohannes Schindelin, Apr 21, 2018
  269. 1/4 rebase -i: demonstrate bugs with fixup!/squash! commit messagesJohannes Schindelin, Apr 21, 2018
  270. 2/4 rebase -i: Handle "combination of <n> commits" with GETTEXT_POISONJohannes Schindelin, Apr 21, 2018
  271. 3/4 sequencer: leave a tell-tale when a fixup/squash failedJohannes Schindelin, Apr 21, 2018
  272. 4/4 rebase --skip: clean up commit message after a failed fixup/squashJohannes Schindelin, Apr 21, 2018
  273. Stefan BellerApr 23, 2018
  274. Phillip WoodApr 23, 2018
  275. Johannes SchindelinApr 25, 2018
  276. Phillip WoodApr 25, 2018
  277. Johannes SchindelinApr 26, 2018
  278. Phillip WoodApr 26, 2018
  279. Junio C HamanoApr 24, 2018
  280. 0/4 rebase -i: avoid stale "# This is a combination of" in commit messagesJohannes Schindelin, Apr 27, 2018
  281. 1/4 rebase -i: demonstrate bugs with fixup!/squash! commit messagesJohannes Schindelin, Apr 27, 2018
  282. 3/4 sequencer: always commit without editing when asked forJohannes Schindelin, Apr 27, 2018
  283. 2/4 rebase -i: Handle "combination of <n> commits" with GETTEXT_POISONJohannes Schindelin, Apr 27, 2018
  284. 4/4 rebase --skip: clean up commit message after a failed fixup/squashJohannes Schindelin, Apr 27, 2018
  285. Stefan BellerApr 27, 2018
  286. Johannes SchindelinApr 28, 2018
  287. Phillip WoodMay 6, 2018
  288. Phillip WoodMay 9, 2018
  289. Johannes SchindelinOct 2, 2018
  290. Phillip WoodOct 8, 2018
  291. 08/17 sequencer: fast-forward `merge` commands, if possibleJohannes Schindelin, Apr 19, 2018
  292. 09/17 rebase-helper --make-script: introduce a flag to rebase mergesJohannes Schindelin, Apr 19, 2018
  293. 10/17 rebase: introduce the --rebase-merges optionJohannes Schindelin, Apr 19, 2018
  294. 11/17 rebase --rebase-merges: add test for --keep-emptyJohannes Schindelin, Apr 19, 2018
  295. 12/17 sequencer: make refs generated by the `label` command worktree-localJohannes Schindelin, Apr 19, 2018
  296. 13/17 sequencer: handle post-rewrite for merge commandsJohannes Schindelin, Apr 19, 2018
  297. 14/17 rebase --rebase-merges: avoid "empty merges"Johannes Schindelin, Apr 19, 2018
  298. 15/17 pull: accept --rebase=merges to recreate the branch topologyJohannes Schindelin, Apr 19, 2018
  299. 16/17 rebase -i: introduce --rebase-merges=[no-]rebase-cousinsJohannes Schindelin, Apr 19, 2018
  300. 17/17 rebase -i --rebase-merges: add a section to the man pageJohannes Schindelin, Apr 19, 2018
  301. 00/16 rebase -i: offer to recreate commit topology by rebasing mergesJohannes Schindelin, Apr 21, 2018
  302. 01/16 sequencer: avoid using errno clobbered by rollback_lock_file()Johannes Schindelin, Apr 21, 2018
  303. 02/16 sequencer: make rearrange_squash() a bit more obviousJohannes Schindelin, Apr 21, 2018
  304. 03/16 sequencer: refactor how original todo list lines are accessedJohannes Schindelin, Apr 21, 2018
  305. 04/16 sequencer: offer helpful advice when a command was rescheduledJohannes Schindelin, Apr 21, 2018
  306. 05/16 git-rebase--interactive: clarify argumentsJohannes Schindelin, Apr 21, 2018
  307. 06/16 sequencer: introduce the `merge` commandJohannes Schindelin, Apr 21, 2018
  308. Phillip WoodApr 21, 2018
  309. Phillip WoodApr 22, 2018
  310. Johannes SchindelinApr 23, 2018
  311. Johannes SchindelinApr 23, 2018
  312. Phillip WoodApr 23, 2018
  313. Martin ÅgrenApr 24, 2018
  314. 1/2 merge: setup `opts` later in `checkout_fast_forward()`Martin Ågren, Apr 24, 2018
  315. Jacob KellerApr 24, 2018
  316. Martin ÅgrenApr 24, 2018
  317. Johannes SchindelinApr 24, 2018
  318. 2/2 unpack_trees_options: free messages when doneMartin Ågren, Apr 24, 2018
  319. Elijah NewrenApr 24, 2018
  320. Martin ÅgrenApr 28, 2018
  321. Johannes SchindelinApr 28, 2018
  322. Elijah NewrenApr 28, 2018
  323. Elijah NewrenMay 16, 2018
  324. 0/3 unpack_trees_options: free messages when doneMartin Ågren, May 16, 2018
  325. 1/3 merge: setup `opts` later in `checkout_fast_forward()`Martin Ågren, May 16, 2018
  326. Stefan BellerMay 16, 2018
  327. Martin ÅgrenMay 16, 2018
  328. Jacob KellerMay 16, 2018
  329. Jacob KellerMay 16, 2018
  330. Junio C HamanoMay 17, 2018
  331. Jacob KellerMay 18, 2018
  332. 2/3 merge-recursive: provide pair of `unpack_trees_{start,finish}()`Martin Ågren, May 16, 2018
  333. 3/3 unpack_trees_options: free messages when doneMartin Ågren, May 16, 2018
  334. Junio C HamanoMay 17, 2018
  335. Martin ÅgrenMay 18, 2018
  336. 0/3 unpack_trees_options: free messages when doneMartin Ågren, May 18, 2018
  337. 1/3 merge: setup `opts` later in `checkout_fast_forward()`Martin Ågren, May 18, 2018
  338. 2/3 merge-recursive: provide pair of `unpack_trees_{start,finish}()`Martin Ågren, May 18, 2018
  339. 3/3 unpack_trees_options: free messages when doneMartin Ågren, May 18, 2018
  340. Jeff KingMay 18, 2018
  341. Elijah NewrenMay 18, 2018
  342. Jeff KingMay 19, 2018
  343. Martin ÅgrenMay 19, 2018
  344. 0/4 unpack_trees_options: free messages when doneMartin Ågren, May 20, 2018
  345. 1/4 merge: setup `opts` later in `checkout_fast_forward()`Martin Ågren, May 20, 2018
  346. 2/4 merge-recursive: provide pair of `unpack_trees_{start,finish}()`Martin Ågren, May 20, 2018
  347. 3/4 string-list: provide `string_list_appendf()`Martin Ågren, May 20, 2018
  348. Jacob KellerMay 20, 2018
  349. Re*: [PATCH v4 3/4] string-list: provide `string_list_appendf()`Junio C Hamano, May 21, 2018
  350. Junio C HamanoMay 21, 2018
  351. Jeff KingMay 21, 2018
  352. 0/4 unpack_trees_options: free messages when doneMartin Ågren, May 21, 2018
  353. 1/4 merge: setup `opts` later in `checkout_fast_forward()`Martin Ågren, May 21, 2018
  354. 2/4 merge-recursive: provide pair of `unpack_trees_{start,finish}()`Martin Ågren, May 21, 2018
  355. 3/4 argv-array: return the pushed string from argv_push*()Martin Ågren, May 21, 2018
  356. 4/4 unpack_trees_options: free messages when doneMartin Ågren, May 21, 2018
  357. Jeff KingMay 21, 2018
  358. Junio C HamanoMay 22, 2018
  359. Junio C HamanoMay 22, 2018
  360. Martin ÅgrenMay 22, 2018
  361. Junio C HamanoMay 23, 2018
  362. Jeff KingMay 21, 2018
  363. 4/4 unpack_trees_options: free messages when doneMartin Ågren, May 20, 2018
  364. Elijah NewrenMay 16, 2018
  365. Ben PeartMay 17, 2018
  366. Johannes SchindelinApr 24, 2018
  367. Philip OakleyApr 22, 2018
  368. Johannes SchindelinApr 23, 2018
  369. Philip OakleyApr 23, 2018
  370. Johannes SchindelinApr 24, 2018
  371. Philip OakleyApr 24, 2018
  372. Philip OakleyApr 22, 2018
  373. 07/16 sequencer: fast-forward `merge` commands, if possibleJohannes Schindelin, Apr 21, 2018
  374. 08/16 rebase-helper --make-script: introduce a flag to rebase mergesJohannes Schindelin, Apr 21, 2018
  375. Philip OakleyApr 22, 2018
  376. Johannes SchindelinApr 24, 2018
  377. 09/16 rebase: introduce the --rebase-merges optionJohannes Schindelin, Apr 21, 2018
  378. Philip OakleyApr 22, 2018
  379. Johannes SchindelinApr 24, 2018
  380. Philip OakleyApr 22, 2018
  381. Junio C HamanoApr 24, 2018
  382. Johannes SchindelinApr 24, 2018
  383. Johannes SchindelinApr 24, 2018
  384. 10/16 rebase --rebase-merges: add test for --keep-emptyJohannes Schindelin, Apr 21, 2018
  385. 11/16 sequencer: make refs generated by the `label` command worktree-localJohannes Schindelin, Apr 21, 2018
  386. 12/16 sequencer: handle post-rewrite for merge commandsJohannes Schindelin, Apr 21, 2018
  387. 13/16 rebase --rebase-merges: avoid "empty merges"Johannes Schindelin, Apr 21, 2018
  388. 14/16 pull: accept --rebase=merges to recreate the branch topologyJohannes Schindelin, Apr 21, 2018
  389. 15/16 rebase -i: introduce --rebase-merges=[no-]rebase-cousinsJohannes Schindelin, Apr 21, 2018
  390. 16/16 rebase -i --rebase-merges: add a section to the man pageJohannes Schindelin, Apr 21, 2018
  391. 00/17 rebase -i: offer to recreate commit topology by rebasing mergesJohannes Schindelin, Apr 25, 2018
  392. 01/17 sequencer: avoid using errno clobbered by rollback_lock_file()Johannes Schindelin, Apr 25, 2018
  393. 02/17 sequencer: make rearrange_squash() a bit more obviousJohannes Schindelin, Apr 25, 2018
  394. 03/17 sequencer: refactor how original todo list lines are accessedJohannes Schindelin, Apr 25, 2018
  395. 04/17 sequencer: offer helpful advice when a command was rescheduledJohannes Schindelin, Apr 25, 2018
  396. 05/17 git-rebase--interactive: clarify argumentsJohannes Schindelin, Apr 25, 2018
  397. 06/17 sequencer: introduce new commands to reset the revisionJohannes Schindelin, Apr 25, 2018
  398. 07/17 sequencer: introduce the `merge` commandJohannes Schindelin, Apr 25, 2018
  399. 08/17 sequencer: fast-forward `merge` commands, if possibleJohannes Schindelin, Apr 25, 2018
  400. 09/17 rebase-helper --make-script: introduce a flag to rebase mergesJohannes Schindelin, Apr 25, 2018
  401. 10/17 rebase: introduce the --rebase-merges optionJohannes Schindelin, Apr 25, 2018
  402. 11/17 rebase --rebase-merges: add test for --keep-emptyJohannes Schindelin, Apr 25, 2018
  403. 12/17 sequencer: make refs generated by the `label` command worktree-localJohannes Schindelin, Apr 25, 2018
  404. 13/17 sequencer: handle post-rewrite for merge commandsJohannes Schindelin, Apr 25, 2018
  405. 15/17 pull: accept --rebase=merges to recreate the branch topologyJohannes Schindelin, Apr 25, 2018
  406. 16/17 rebase -i: introduce --rebase-merges=[no-]rebase-cousinsJohannes Schindelin, Apr 25, 2018
  407. 14/17 rebase --rebase-merges: avoid "empty merges"Johannes Schindelin, Apr 25, 2018
  408. 17/17 rebase -i --rebase-merges: add a section to the man pageJohannes Schindelin, Apr 25, 2018
  409. Junio C HamanoApr 26, 2018
  410. Junio C HamanoApr 26, 2018
  411. Sergey OrganovMay 25, 2018
  412. Sergey OrganovMay 25, 2018

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.