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

Re: git pull versus fetch/merge

From
Björn Steinbrink <b.steinbrink@gmx.de>
Date
Jul 21, 2008, 10:23 UTC
Message-ID
<20080721102320.GA19776@atjola.homenet>
In-Reply-To
<488452D6.1060508@keyaccess.nl>
On 2008.07.21 11:11:50 +0200, Rene Herman wrote:
Show 34 quoted lines
> Good day.
>
> A while ago I was here asking about "git pull" versus "git merge" for  
> local branches -- now I see a difference for remote ones that I'm not  
> sure should be there.
>
> I gathered before that "git pull <remote> <branch>" should basically be  
> shorthand for "git fetch <remote>, git merge <remote>/<branch>". Is that  
> correct?
>
> I'm seeing a problem I believe with a specific repository:
>
> rene@7ixe4:~/src/linux/7ixe4$ git remote show tiwai
> * remote tiwai
>   URL: git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6
>   Tracked remote branches
>     devel dma-fix for-linus master upstream
>
> with "git pull tiwai devel" everything goes well:
>
> rene@7ixe4:~/src/linux/7ixe4$ git status
> # On branch master
> nothing to commit (working directory clean)
> rene@7ixe4:~/src/linux/7ixe4$ git branch tmp0 v2.6.26
> rene@7ixe4:~/src/linux/7ixe4$ git branch tmp1 v2.6.26
> rene@7ixe4:~/src/linux/7ixe4$ git checkout tmp0
> Switched to branch "tmp0"
> rene@7ixe4:~/src/linux/7ixe4$ git pull tiwai devel
> Updating bce7f79..e0bf09b
> Fast forward
>  Documentation/sound/alsa/ALSA-Configuration.txt    |   17 +-
>  [ ... ]
>
> and I get a clean merge.

"git pull remote branch" does "git fetch remote branch". That only fetches that single branch and stores it in FETCH_HEAD. The merge part then merges what is in FETCH_HEAD into your current branch.

Show 9 quoted lines
> On the other hand, if I try to do this with a  fetch/merge, I get:
>
> rene@7ixe4:~/src/linux/7ixe4$ git checkout tmp1
> Switched to branch "tmp1"
> rene@7ixe4:~/src/linux/7ixe4$ git fetch tiwai
> From git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6
>  ! [rejected]        devel      -> tiwai/devel  (non fast forward)
>  ! [rejected]        dma-fix    -> tiwai/dma-fix  (non fast forward)
>  ! [rejected]        master     -> tiwai/master  (non fast forward)

The rejected branches had their history rewritten since your last fetch. Git rejects to update your remote tracking branches in that case. The history rewriting might have been an accident, or it might have been intentional. Only the owner of that repo is able to tell that.

You can use -f to force the updates.
Show 17 quoted lines
> rene@7ixe4:~/src/linux/7ixe4$ git merge tiwai/devel
> Auto-merged sound/pci/ac97/ac97_patch.c
> Auto-merged sound/pci/emu10k1/emu10k1_main.c
> Auto-merged sound/pci/hda/patch_analog.c
> Auto-merged sound/pci/hda/patch_realtek.c
> CONFLICT (content): Merge conflict in sound/pci/hda/patch_realtek.c
> Auto-merged sound/pci/hda/patch_sigmatel.c
> Automatic merge failed; fix conflicts and then commit the result.
>
> and me no happy...
>
> It probably has something to do with that " ! [rejected]" but what is  
> that about? Is the repo bad? (and if so, I suspect owner will want to  
> know how to avoid it in the future).
>
> And if it is bad, should I be seeing something with the pull method  
> also? Moreover... can I now trust my tmp0 branch?

Your fetch/merge approach was different from what your pull approach did. tiwai/devel did not get updated by the fetch, which means that you tried to merge the old state of that branch and that caused some conflicts. OTOH the pull did fetch the latest state from the remote repo and merged that cleanly.

Your fetch/merge approach was more like "git pull" without any arguments, but with the current branch setup to track tiwai/devel. In that case, pull really does a "git fetch tiwai", and it should fail in the same way.

Björn
Previous: Rene HermanNext: Rene Herman
Message 2 of 8 in “git pull versus fetch/merge”
  1. Rene HermanJul 21, 2008
  2. Björn SteinbrinkJul 21, 2008
  3. Rene HermanJul 21, 2008
  4. Jeff KingJul 21, 2008
  5. Jeff KingJul 21, 2008
  6. Rene HermanJul 21, 2008
  7. Björn SteinbrinkJul 21, 2008
  8. Rene HermanJul 21, 2008

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.