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

Re: 'git rebase' silently drops changes?

From
Johannes Sixt <j6t@kdbg.org>
Date
Feb 9, 2015, 19:03 UTC
Message-ID
<54D90473.2090208@kdbg.org>
In-Reply-To
<87oap38cv1.fsf@osv.gnss.ru>
Am 09.02.2015 um 13:53 schrieb Sergey Organov:
Show 21 quoted lines
> Johannes Sixt <j6t@kdbg.org> writes:
> 
>> Am 07.02.2015 um 22:32 schrieb Sebastian Schuberth:
>>> On 06.02.2015 22:28, Sergey Organov wrote:
>>>
>>>> # Now rebase my work.
>>>> git rebase -f HEAD~1
>>>>
>>>> # What? Where is my "Precious" change in "a"???
>>>> cat a
>>>> </SCRIPT>
>>>>
>>>> I.e., the modification marked [!] was silently lost during rebase!
>>>
>>> Just a wild guess: Maybe because you omitted "-p" / "--preserve-merges"
>>> from "git rebase"?
>>
>> No, that would not help. --preserve-merges repeats the merge, but does
>> not apply the amendment.
> 
> Really? Why? Here the valid concern you gave below doesn't even apply!

--preserve-merges was bolted on to git-rebase. The first implementation just re-computed the merge, and rebase would be interrupted if the merge was not clean. This was good enough for many.

Later --preserve-merges was abused to replay not only integration branches, but branchy history in general. At that time, the feature was deemed wide spread enough that changing its behavior was a no-go.

There you have it.

If you want a version of --preserve-merges that does what *you* need, consider this commit:

  git://repo.or.cz/git/mingw/j6t.git rebase-p-first-parent
Use it like this:
  git rebase -i -p --first-parent ...

Beware, its implementation is incomplete: if the rebase is interrupted, then 'git rebase --continue' behaves as if --first-parent were not given.

Show 8 quoted lines
>> it is impossible for git rebase to decide to which rebased
>> commit the amendement applies. It doesn't even try to guess. It's the
>> responsibility of the user to apply the amendment to the correct
>> commit.
> 
> Yeah, this sounds reasonable, /except/ git even gives no warning when it
> drops amendments. Shouldn't 'git rebase' rather consider merge amendment
> a kind of conflict?

There is work in progress where a merge is computed entirely in-memory (without relying on files in the worktree). It could be used to detect whether there are any changes beyond the automatic merge results, and they could be warned about.

-- Hannes
Previous: Sergey OrganovNext: Sergey Organov
Message 5 of 7 in “'git rebase' silently drops changes?”
  1. Sergey OrganovFeb 6, 2015
  2. Sebastian SchuberthFeb 7, 2015
  3. Johannes SixtFeb 8, 2015
  4. Sergey OrganovFeb 9, 2015
  5. Johannes SixtFeb 9, 2015
  6. Sergey OrganovFeb 10, 2015
  7. Johannes SixtFeb 10, 2015

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.