"git pull . <branch>" versus "git merge <branch>"
Good day.
The manpages seem to be making somewhat of a point of mentioning "git pull . <branch>" as the way to merge a local branch into the current one but a simple "git merge <branch>" seems to work well. Is there a difference?
Rene.
Quoted 6 lines · Rene Herman
Good day.
The manpages seem to be making somewhat of a point of mentioning "git pull . <branch>" as the way to merge a local branch into the current one but a simple "git merge <branch>" seems to work well. Is there a difference?
There isn't any.
"git pull . this_branch" is just a natural and logical consequence that you can fetch and merge a branch B from remote U with "git pull $U $B".
"git merge that_branch" exists and useful because people on average merge local branches more than they fetch and merge from remote repository.
Quoted 7 lines · Junio C Hamano
Quoted 4 lines · Rene Herman
The manpages seem to be making somewhat of a point of mentioning "git pull . <branch>" as the way to merge a local branch into the current one but a simple "git merge <branch>" seems to work well. Is there a difference?
Quoted 7 lines
There isn't any.
"git pull .
this_branch" is just a natural and logical consequence that you can fetch and merge a branch B from remote U with "git pull $U $B"."git merge
that_branch" exists and useful because people on average merge local branches more than they fetch and merge from remote repository.
Thank you. Slowly getting more comfortable with git...
Rene.
Quoted 5 lines · Rene Herman
Good day.
The manpages seem to be making somewhat of a point of mentioning "git pull . <branch>" as the way to merge a local branch into the current one but a simple "git merge <branch>" seems to work well. Is there a difference?
Those manpage sections predate the existance of "git merge <branch>". If you're not planning to use git before November 2006, there's no reason to use the "git pull ." form. They should probably be replaced with more helpful examples at this point.
-Daniel
*This .sig left intentionally blank*
Quoted 4 lines · Daniel Barkalow
Quoted 2 lines · Rene Herman
Good day.
Quoted 8 lines
Quoted 3 lines
The manpages seem to be making somewhat of a point of mentioning "git pull . <branch>" as the way to merge a local branch into the current one but a simple "git merge <branch>" seems to work well. Is there a difference?
Those manpage sections predate the existance of "git merge <branch>". If you're not planning to use git before November 2006, there's no reason to use the "git pull ." form. They should probably be replaced with more helpful examples at this point.
Was there some past discussion of the ui merits of a separate 'merge' command for dealing with local merges and a 'pull' command for remote merges? I understand merge is the backend. The question has to do with the high-level user interface: one command or two? Why wasn't git-pull enough?
I ask because elsewhere in this thread Miklos suggests that git-merge should be preferred over git-pull when dealing with a local repostory and you suggest here that the documentation should be updated to use the 'git merge' method instead of 'git pull'. I had the impression that git-merge was only used by those who had not yet gotten their mind around the pull methodology. So it was more of an 'ease the transition from other SCMs' rather than the recommended way of doing things.
-brandon
Quoted 14 lines · Brandon Casey
Quoted 4 lines · Daniel Barkalow
Quoted 2 lines · Rene Herman
Good day.
Quoted 8 lines
Quoted 3 lines
The manpages seem to be making somewhat of a point of mentioning "git pull . <branch>" as the way to merge a local branch into the current one but a simple "git merge <branch>" seems to work well. Is there a difference?
Those manpage sections predate the existance of "git merge <branch>". If you're not planning to use git before November 2006, there's no reason to use the "git pull ." form. They should probably be replaced with more helpful examples at this point.
Quoted 4 lines
Was there some past discussion of the ui merits of a separate 'merge' command for dealing with local merges and a 'pull' command for remote merges? I understand merge is the backend. The question has to do with the high-level user interface: one command or two? Why wasn't git-pull enough?
"git pull . <branch>" does "git fetch . <branch>" and then merges it. Of course, "git fetch . <branch>" does nothing at all, and it's weird as a user interface to have the only (simple) way of selecting something to merge be to fetch it as if from a remote repository, but from the local repository. After all, no other purely local operation requires you to first fetch the thing you're interesting in from yourself.
Quoted 7 lines
I ask because elsewhere in this thread Miklos suggests that git-merge should be preferred over git-pull when dealing with a local repostory and you suggest here that the documentation should be updated to use the 'git merge' method instead of 'git pull'. I had the impression that git-merge was only used by those who had not yet gotten their mind around the pull methodology. So it was more of an 'ease the transition from other SCMs' rather than the recommended way of doing things.
I think everybody uses "git merge" instead of "git pull ." these days. It's shorter and less fiddly to type, and doesn't polute your bash reverse search for "git pull<tab>" with local things. And, if you've got a bunch of local branches, which is not uncommon and very much native to git, the intuitive thing is to merge them with "git merge" instead of treating them as if they weren't local.
It's also now pretty common to want to do "git fetch <remote>", inspect it, decide whether this is something you want to merge (and depend on), and do "git merge <tracking>" to include it in your branch if you want it. (And being able to fetch stuff from a remote location, and later do a merge without any non-local information is also very git-style.)
Of course, if you're pulling from a remote repository, you generally want to use "git pull", but you wouldn't be using "git pull ."
-Daniel
*This .sig left intentionally blank*
Quoted 19 lines · Daniel Barkalow
Quoted 8 lines · Brandon Casey
Quoted 7 lines · Daniel Barkalow
Quoted 5 lines · Rene Herman
Good day.
The manpages seem to be making somewhat of a point of mentioning "git pull . <branch>" as the way to merge a local branch into the current one but a simple "git merge <branch>" seems to work well. Is there a difference?
Quoted 8 lines
Quoted 4 lines
Those manpage sections predate the existance of "git merge <branch>". If you're not planning to use git before November 2006, there's no reason to use the "git pull ." form. They should probably be replaced with more helpful examples at this point.
Was there some past discussion of the ui merits of a separate 'merge' command for dealing with local merges and a 'pull' command for remote merges? I understand merge is the backend. The question has to do with the high-level user interface: one command or two? Why wasn't git-pull enough?
Quoted 6 lines
"git pull . <branch>" does "git fetch . <branch>" and then merges it. Of course, "git fetch . <branch>" does nothing at all, and it's weird as a user interface to have the only (simple) way of selecting something to merge be to fetch it as if from a remote repository, but from the local repository. After all, no other purely local operation requires you to first fetch the thing you're interesting in from yourself.
I don't agree with this paragraph. I think it _would_ be weird if you had to type 'git fetch' and then 'git merge' (or git pull) when operating on a local repository, but that is not necessary. It is only necessary to type 'git pull'. There is symmetry between operating on a remote repository and operating on a local repository. The user does not need to know that a noop fetch is first performed, or whether the pull command detects that it is operating on a local repository and just skips the fetch, any more than the user is required to know the exact sequence of events that allows an ssh session to succeed.
Quoted 8 lines
Quoted 7 lines
I ask because elsewhere in this thread Miklos suggests that git-merge should be preferred over git-pull when dealing with a local repostory and you suggest here that the documentation should be updated to use the 'git merge' method instead of 'git pull'. I had the impression that git-merge was only used by those who had not yet gotten their mind around the pull methodology. So it was more of an 'ease the transition from other SCMs' rather than the recommended way of doing things.
Quoted 6 lines
I think everybody uses "git merge" instead of "git pull ." these days. It's shorter and less fiddly to type, and doesn't polute your bash reverse search for "git pull<tab>" with local things. And, if you've got a bunch of local branches, which is not uncommon and very much native to git, the intuitive thing is to merge them with "git merge" instead of treating them as if they weren't local.
Not sure about this one either. I think git-merge is intuitive to those who are familiar with the operation of git-pull, specifically those that understand how to use git-fetch and that git-pull does a fetch and then a merge. For those new to git, I think git-fetch takes a little while to get a handle on.
git-pull allows treating all branches as equal for merging purposes. A user does not have to differentiate between a local and a remote branch by using different commands. So I did not see it as 'treating [a local branch] as if they weren't local', but instead as a single command to merge branches regardless of whether they are local or remote.
Suggesting git-merge is what requires the user to make a distinction between local and remote branches.
Quoted 5 lines
It's also now pretty common to want to do "git fetch <remote>", inspect it, decide whether this is something you want to merge (and depend on), and do "git merge <tracking>" to include it in your branch if you want it. (And being able to fetch stuff from a remote location, and later do a merge without any non-local information is also very git-style.)
Yes, I agree that it is common to fetch and inspect before merging. The 'git merge <tracking>' could have been 'git pull . <tracking>', which only requires typing one additional character. The user _must_ know how to use git-pull, and the concept of '.' as a placeholder for the local repository takes only a moment to digest. git-merge is an additional command that the user must know when to use and when not to use. Well maybe that exaggerates the point a little, git-merge is not that complicated, but it is an additional command to learn with little benefit that I see.
To summarize my point, I think the recommended advertised merge command could be one single command 'git-pull' and that it should be used in the documentation in preference to 'git-merge'. It seems to me that this simplifies the user interface and requires the user to master fewer commands before becoming productive.
Also, I thought this was already the status-quo and so I have been surprised by the increasing suggestions to use git-merge on the mailing list. I saw it as something similar to suggestions I've seen to use git-reflog (not porcelain) rather than 'git-log -g' (porcelain).
-brandon
2008/6/11 Brandon Casey <[email protected]>:
Quoted 37 lines
Quoted 19 lines · Daniel Barkalow
Quoted 8 lines · Brandon Casey
Quoted 7 lines · Daniel Barkalow
Quoted 5 lines · Rene Herman
Good day.
The manpages seem to be making somewhat of a point of mentioning "git pull . <branch>" as the way to merge a local branch into the current one but a simple "git merge <branch>" seems to work well. Is there a difference?
Quoted 8 lines
Quoted 4 lines
Those manpage sections predate the existance of "git merge <branch>". If you're not planning to use git before November 2006, there's no reason to use the "git pull ." form. They should probably be replaced with more helpful examples at this point.
Was there some past discussion of the ui merits of a separate 'merge' command for dealing with local merges and a 'pull' command for remote merges? I understand merge is the backend. The question has to do with the high-level user interface: one command or two? Why wasn't git-pull enough?
Quoted 6 lines
"git pull . <branch>" does "git fetch . <branch>" and then merges it. Of course, "git fetch . <branch>" does nothing at all, and it's weird as a user interface to have the only (simple) way of selecting something to merge be to fetch it as if from a remote repository, but from the local repository. After all, no other purely local operation requires you to first fetch the thing you're interesting in from yourself.
I don't agree with this paragraph. I think it _would_ be weird if you had to type 'git fetch' and then 'git merge' (or git pull) when operating on a local repository, but that is not necessary. It is only necessary to type 'git pull'. There is symmetry between operating on a remote repository and operating on a local repository. The user does not need to know that a noop fetch is first performed, or whether the pull command detects that it is operating on a local repository and just skips the fetch, any more than the user is required to know the exact sequence of events that allows an ssh session to succeed.
Quoted 1 line
The user _must_ know how to use git-pull
I've used git for a couple of months, and I've never used git-pull, only fetch and merge. To me it doesn't make any sense that you would want to merge changes without looking at them first. It also seems very strange to me to treat not-yet-fetched branches on a remote the same as a local branch. I don't really have any useful input other than that you shouldn't assume what other people find intuitive, because you are usually wrong :).
Quoted 2 lines
Well maybe that exaggerates the point a little, git-merge is not that complicated, but it is an additional command to learn with little benefit that I see.
For me, git-pull is that additional command, and using git-pull . <branch> to merge
feels really really strange. Why would I pull something I already have?
Quoted 2 lines
I saw it as something similar to suggestions I've seen to use git-reflog (not porcelain) rather than 'git-log -g' (porcelain).
The output of git-reflog is easier to read when you know what you're looking for,
the actual commit message and author info that log outputs is usually superfluous.
Signature · 1 line
Mikael Magnusson
Quoted 2 lines · Mikael Magnusson
For me, git-pull is that additional command, and using git-pull . <branch> to merge feels really really strange. Why would I pull something I already have?
For what it's worth I (as thread starter) agree with this. At least in my mind local and remote branches are very different and I do not mind having to "fetch" the latter first before merging (nor combine the two through a "pull").
I can see the reason for the other viewpoint as well since it emphasises a point about local and remote branches _not_ being very different after all but that's more a symmetry to the implementor than it is to a user I feel. For the user, local and remote branches just are different.
And as such I feel it actually helps to just use "merge". Thanks for the answers everyone -- this was a matter of a user worrying that he wasn't getting it...
Rene
Quoted 3 lines · Rene Herman
The manpages seem to be making somewhat of a point of mentioning "git pull . <branch>" as the way to merge a local branch into the current one but a simple "git merge <branch>" seems to work well. Is there a difference?
git pull also does a fetch in it's usual mode of operation, and runs git merge to do merge changes in the remote-tracking branches.
Dave.
Quoted 8 lines · David Symonds
Quoted 3 lines · Rene Herman
The manpages seem to be making somewhat of a point of mentioning "git pull . <branch>" as the way to merge a local branch into the current one but a simple "git merge <branch>" seems to work well. Is there a difference?
git pull also does a fetch in it's usual mode of operation, and runs git merge to do merge changes in the remote-tracking branches.
So in the case of merging a branch from the local repository into the current branch, there is no difference between the two?
Rene.
Quoted 2 lines · Rene Herman
So in the case of merging a branch from the local repository into the current branch, there is no difference between the two?
There is no difference, but you really want to use git merge and not git pull in such a case, I guess the git pull form is supported mainly to keep backwards compatibility.
Quoted 9 lines · Miklos Vajna
Quoted 2 lines · Rene Herman
So in the case of merging a branch from the local repository into the current branch, there is no difference between the two?
There is no difference, but you really want to use git merge and not git pull in such a case, I guess the git pull form is supported mainly to keep backwards compatibility.
Thanks much, nice and clear! It might be good to adjust the git-pull manpage a bit if the merge is preferred? It sorts of sounds like its advertising the pull method now.
Regards,
Rene
Quoted 6 lines · Miklos Vajna
Quoted 1 line · Rene Herman
So in the case of merging a branch from the local repository into the current branch, there is no difference between the two?
There is no difference, but you really want to use git merge and not git pull in such a case, I guess the git pull form is supported mainly to keep backwards compatibility.
However, when you're on a tracking merge only "git pull" will merge the right branch automatically into the current branch, fetching the branch name to merge from the config. If the branch.*.remote config key is ".", it will do a local merge.
Note that "git pull ." is optimized in that the fetch does nothing except setting up MERGE_HEAD.
Paolo
Quoted 9 lines · Paolo Bonzini
Quoted 6 lines · Miklos Vajna
Quoted 1 line · Rene Herman
So in the case of merging a branch from the local repository into the current branch, there is no difference between the two?
There is no difference, but you really want to use git merge and not git pull in such a case, I guess the git pull form is supported mainly to keep backwards compatibility.
However, when you're on a tracking merge
On a what? :)
Quoted 5 lines
only "git pull" will merge the right branch automatically into the current branch, fetching the branch name to merge from the config. If the branch.*.remote config key is ".", it will do a local merge.
Note that "git pull ." is optimized in that the fetch does nothing except setting up
MERGE_HEAD.
Rene.
Quoted 8 lines
Quoted 6 lines
Quoted 4 lines
There is no difference, but you really want to use git merge and not git pull in such a case, I guess the git pull form is supported mainly to keep backwards compatibility.
However, when you're on a tracking merge
On a what? :)
Tracking *branch*, sorry. A branch that has configuration options like
[branch "foo"]
remote = origin
merge = next
so that git knows that, when you're on branch foo, "git pull" is actually equivalent to "git pull origin next:foo".
Paolo