Git pull/fetch with refspec differences

后端 未结 4 1591

Using refspec is a convenient way to grab a remote branch and create a similar one but with given name (or the other way round: create a remote one with a given name differe

相关标签:
4条回答
  • 2020-12-05 15:28

    I had used smartgit to create branch, so might be at that branch doesn't properly merged into master. Created support branch for release ie support/4.2, tag automatically get created but now wehn I try to do git pull, it shows me same error. As support/4.2 brannch is created in github but not properly merged in local. So I have used this :- git pull origin master:mymaster

    In my case - git pull origin support/4.2:support/4.2

    It works :)

    0 讨论(0)
  • 2020-12-05 15:38

    A refspec is just a source/destination pair. Using a refspec x:y with fetch tells git to make a branch in this repo named "y" that is a copy of the branch named "x" in the remote repo. Nothing else.

    With pull, git throws a merge on top. First, a fetch is done using the given refspec, and then the destination branch is merged into the current branch. If that's confusing, here's a step-by-step:

    git pull origin master:mymaster
    
    1. Go to origin and get branch "master"
    2. Make a copy of it locally named "mymaster"
    3. Merge "mymaster" into the current branch

    Fully qualified, that would be refs/heads/mymaster and refs/heads/master. For comparison, the default refspec set up by git on a clone is +refs/heads/*:refs/remotes/origin/*. refs/remotes makes a convenient namespace for keeping remote branches separate from local ones. What you're doing is telling git to put a remote-tracking branch in the same namespace as your local branches.

    As for "tracking branches", that's just an entry in your config file telling git where to pull and push a local branch to/from by default.

    0 讨论(0)
  • 2020-12-05 15:43

    git fetch origin master:mymaster

    However, the command must meet the following two conditions strictly:

    1. The local current branch cannot be mymaster.

    2. The local mymaster branch is the ancestor of origin/master.

    then will make fast-forward merge.Otherwise it will report an fatal.

    When both of the above conditions are true, execute the command:

    git pull origin master:mymaster

    In addition to executing the command:

    git fetch origin master:mymaster

    Will also execute:

    git merge FETCH_HEAD.

    Notice :not git merge mymaster

    FETCH_HEAD is different from mymaster,because mymaster maybe already fast-forward merge.

    0 讨论(0)
  • 2020-12-05 15:48

    git fetch origin master:mymaster updates branch mymaster in the local repository by fetching from the master branch of the remote repository.

    git pull origin master:mymaster does above and merges it into the current branch.

    0 讨论(0)
提交回复
热议问题