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

Newbie: report of first experience with git-rebase.

From
SOSergei Organov <osv@javad.com>
Date
Oct 31, 2007, 19:39 UTC
Message-ID
<87d4uv3wh1.fsf@osv.gnss.ru>
Hello,

I've made my first attempt at tracking my changes to upstream git repository using git-fetch/git-rebase workflow. I did three commits to my master branch, and then upstream incorporated two of them in slightly modified form, so that some conflicts are to be expected. I did git-fetch followed by git-rebase, and finally have got the end result I hoped for, but there were some confusion along the way. I think I'd post the log of the session here along with my thoughts so that an interested person could see how it works for a newbie (my thoughts and non-git actions at the time of rebasing are marked with 'me>' prefix):

$ git fetch [...] $ git rebase origin First, rewinding head to replay your work on top of it... HEAD is now at 9c51414... Merge branch 'maint' into HEAD

Applying Fix a typo.
Wrote tree f5b2feefc021486eae9d2d84c69e0d6ead027a9d
Committed: 983e907b1360c17c7ac925d6035d82cc7243f406
Applying Use new syntax (-m option) for git-merge.

error: patch failed: Documentation/core-tutorial.txt:878 error: Documentation/core-tutorial.txt: patch does not apply Using index info to reconstruct a base tree... Falling back to patching base and 3-way merge... Auto-merged Documentation/core-tutorial.txt CONFLICT (content): Merge conflict in Documentation/core-tutorial.txt Failed to merge in the changes. Patch failed at 0002.

When you have resolved this problem run "git rebase --continue". If you would prefer to skip this patch, instead run "git rebase --skip". To restore the original branch and stop rebasing run "git rebase --abort".

me> Nice, this conflict is expected. me> Editing Documentation/core-tutorial.txt to resolve the me> conflict... Conflict is resolved so that the working file matches me> upstream version.

$ git rebase --continue You must edit all merge conflicts and then mark them as resolved using git add

me> Nice helpful message, -- need to do git-add

$ git add Documentation/core-tutorial.txt $ git rebase --continue

Applying Use new syntax (-m option) for git-merge.
No changes - did you forget to use 'git add'?

When you have resolved this problem run "git rebase --continue". If you would prefer to skip this patch, instead run "git rebase --skip". To restore the original branch and stop rebasing run "git rebase --abort".

me> What?! I just did the git-add! Moreover, before I did git-add, the me> error was different and helpful. Something went wrong? me> Well, it's unlikely, but maybe I made a mistake of not specifying me> the 'origin'?

$ git rebase --continue origin
Applying Use new syntax (-m option) for git-merge.
No changes - did you forget to use 'git add'?

When you have resolved this problem run "git rebase --continue". If you would prefer to skip this patch, instead run "git rebase --skip". To restore the original branch and stop rebasing run "git rebase --abort".

me> No luck :( A few seconds of thinking... Hmm... no-op patch, do I me> need to skip it? Let's try the --skip:

$ git rebase --skip
Applying Fix SYNOPSIS.

error: patch failed: Documentation/git-merge.txt:10 error: Documentation/git-merge.txt: patch does not apply Using index info to reconstruct a base tree... Falling back to patching base and 3-way merge... Auto-merged Documentation/git-merge.txt CONFLICT (content): Merge conflict in Documentation/git-merge.txt Failed to merge in the changes. Patch failed at 0003.

When you have resolved this problem run "git rebase --continue". If you would prefer to skip this patch, instead run "git rebase --skip". To restore the original branch and stop rebasing run "git rebase --abort".

me> Aha, that's it! But why git didn't just skip the no-op patch me> automatically? Well, anyway , now I have a new expected conflict, me> and I'm sure I just want to skip this patch, so let's try exactly me> that:

$ git rebase --skip Dirty index: cannot apply patches (dirty: Documentation/git-merge.txt)

me> No luck :( Well, let's go the long way, -- edit conflicting me> Documentation/git-merge.txt (so that it matches upstream),

$ git add Documentation/git-merge.txt $ git rebase --skip Nothing to do.

me> Well, I already knew this will work, but why should I edit the file me> and then git-add it just to skip the patch? Is there better way? me> Anyway, the "Nothing to do." above is slightly confusing, -- did it me> actually skip the patch? So let's check the result:

$ gitk

me> The result is as expected, -- the only patch on top of current origin me> HEAD, -- nice.

-- 
Sergei.
Next: Björn Steinbrink
Message 1 of 20 in “Newbie: report of first experience with git-rebase.”
  1. Sergei OrganovOct 31, 2007
  2. Björn SteinbrinkOct 31, 2007
  3. Sergei OrganovOct 31, 2007
  4. Johannes SchindelinOct 31, 2007
  5. J. Bruce FieldsOct 31, 2007
  6. Steven GrimmOct 31, 2007
  7. Daniel BarkalowOct 31, 2007
  8. J. Bruce FieldsOct 31, 2007
  9. Junio C HamanoOct 31, 2007
  10. David KastrupOct 31, 2007
  11. Nicolas PitreNov 1, 2007
  12. Sergei OrganovNov 1, 2007
  13. Johannes SchindelinNov 1, 2007
  14. J. Bruce FieldsNov 1, 2007
  15. Junio C HamanoNov 1, 2007
  16. Andreas EricssonNov 2, 2007
  17. Junio C HamanoNov 2, 2007
  18. David KastrupOct 31, 2007
  19. Alex RiesenOct 31, 2007
  20. Andreas EricssonNov 2, 2007

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.