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

Re: 'git rebase' silently drops changes?

From
Sergey Organov <sorganov@gmail.com>
Date
Feb 9, 2015, 12:53 UTC
Message-ID
<87oap38cv1.fsf@osv.gnss.ru>
In-Reply-To
<54D7696B.3060407@kdbg.org>
Johannes Sixt <j6t@kdbg.org> writes:
Show 17 quoted lines
> 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!

Check... yes, git silently drops amend even with --preserve-merges (script to reproduce at the end[1])! How comes?

Show 7 quoted lines
> It's just how rebase works: It omits merge commits when it linearizes
> history.
>
> Sergey, 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?

[1] To reproduce amend drop by "git rebase --preserve-merges":

<SCRIPT> git init t cd t git config rerere.enabled false # doesn't actually matter either way.

echo "I" > a; git add a echo "I" > b; git add b git commit -aqm "I" git tag start

git checkout -b test
echo "B" >> b; git commit -m "B" -a
git checkout master

echo "A" >> a git commit -aqm "A"

git merge --no-edit test git branch -d test

# Clean merge, but result didn't compile, so I fixed it and # amended the merge: echo "Precious!" >> a # [!] This is modification that gets lost git commit --amend --no-edit -aq cat a

# Make a change earlier in history, to rebase my work on top of it. git co -q start git co -b test echo "C" > c; git add c git commit -aqm "C"

# Now rebase my work. git co master git rebase --preserve-merges --no-fork-point test

# What? Where is my "Precious" change in "a"??? cat a

</SCRIPT>
-- Sergey.
Previous: Johannes SixtNext: Johannes Sixt
Message 4 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.