On 2008.07.21 11:11:50 +0200, Rene Herman wrote: > 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. > 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. > 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 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html