Daniel Barkalow <barkalow@xxxxxxxxxxxx> writes: > On Tue, 14 Oct 2008, Daniel Barkalow wrote: > ... >> That is, it uses --update-head-ok because "git pull origin master:master" >> will work correctly, regardless of whether the local master is >> yet-to-be-born or not. > > In particular, the --update-head-ok is from b10ac50f, which is what added > the check to prohibit fetching into the current branch otherwise, back in > August 2005. There's never been anything preventing updating the current > branch using "pull". What you wrote above is correct, and it is all that is necessary to make "pull master:master" (when 'master' is the current branch) work correctly, in normal situations. Dscho's patch is in itself is a good thing to do, but is not necessary when the caller gives --update-head-ok. Nor is it sufficient. Have you tested the current "git-pull" with or without Dscho's patch applied to "git-fetch" when 'master' is an unborn branch? "git-pull" has this piece: curr_head=$(git rev-parse --verify HEAD 2>/dev/null) if test "$curr_head" != "$orig_head" then # The fetch involved updating the current branch. # The working tree and the index file is still based on the # $orig_head commit, but we are merging into $curr_head. # First update the working tree to match $curr_head. echo >&2 "Warning: fetch updated the current branch head." ... fi The above part (written by yours truly) did not care what happens when the current branch is unborn. Back then when git-pull was originally written, nobody was crazy enough to pull into an empty branch and expect it to work. The code to allow that craziness (look for "initial pull" in the same script to find a 6-line block near the end) came much later, and the commit that added the "initial pull" support should have adjusted the above codeblock if it really wanted to support pulling into an unborn branch, but it forgot to do so. It also forgot to handle the case where the originally unborn current branch was fetched into. If we really care about is "git pull origin master:master" into an unborn branch, I think we need the attached patch on top, and this is regardless of Dscho's patch that tightens the check when -update-head-ok is not given. git-pull.sh | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git c/git-pull.sh w/git-pull.sh index 75c3610..664fe34 100755 --- c/git-pull.sh +++ w/git-pull.sh @@ -124,7 +124,7 @@ orig_head=$(git rev-parse --verify HEAD 2>/dev/null) git fetch --update-head-ok "$@" || exit 1 curr_head=$(git rev-parse --verify HEAD 2>/dev/null) -if test "$curr_head" != "$orig_head" +if test -n "$orig_head" && test "$curr_head" != "$orig_head" then # The fetch involved updating the current branch. @@ -172,7 +172,7 @@ esac if test -z "$orig_head" then - git update-ref -m "initial pull" HEAD $merge_head "" && + git update-ref -m "initial pull" HEAD $merge_head "$curr_head" && git read-tree --reset -u HEAD || exit 1 exit fi -- 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