how to pull into multiple branches at once with git?
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}
In a repo I have multiple branches, among them "master" and "develop", which are set up to track remote branches "origin/master" and "origin/develop".
Is it possible to specify that I want both master and develop to be merged(fast-forwarded) at once?
When I do git pull
now I get something like this:
remote: Counting objects: 92, done.
remote: Compressing objects: 100% (56/56), done.
remote: Total 70 (delta 29), reused 28 (delta 8)
Unpacking objects: 100% (70/70), done.
From scm.my-site.com:my-repo
5386563..902fb45 develop -> origin/develop
d637d67..ba81fb2 master -> origin/master
Updating 5386563..902fb45
Fast-forward
all the remote branches are fetched, but only the branch I'm currently on is merged with its corresponding remote branch.
So I have to do git checkout master
...
Switched to branch 'master'
Your branch is behind 'origin/master' by 106 commits, and can be fast-forwarded.
...and then git pull
again, and then switch back to develop, to get the desired result.
I know I can make aliases/scripts that does these steps. But I want to avoid that if possible, as it is error prone and not very efficient.
Edit: ok let me rephrase that. My goal was not to discourage or frown upon script/alias customizing of git. I would just prefer a builtin solution if it exists :)
git
add a comment |
In a repo I have multiple branches, among them "master" and "develop", which are set up to track remote branches "origin/master" and "origin/develop".
Is it possible to specify that I want both master and develop to be merged(fast-forwarded) at once?
When I do git pull
now I get something like this:
remote: Counting objects: 92, done.
remote: Compressing objects: 100% (56/56), done.
remote: Total 70 (delta 29), reused 28 (delta 8)
Unpacking objects: 100% (70/70), done.
From scm.my-site.com:my-repo
5386563..902fb45 develop -> origin/develop
d637d67..ba81fb2 master -> origin/master
Updating 5386563..902fb45
Fast-forward
all the remote branches are fetched, but only the branch I'm currently on is merged with its corresponding remote branch.
So I have to do git checkout master
...
Switched to branch 'master'
Your branch is behind 'origin/master' by 106 commits, and can be fast-forwarded.
...and then git pull
again, and then switch back to develop, to get the desired result.
I know I can make aliases/scripts that does these steps. But I want to avoid that if possible, as it is error prone and not very efficient.
Edit: ok let me rephrase that. My goal was not to discourage or frown upon script/alias customizing of git. I would just prefer a builtin solution if it exists :)
git
I triedgit pull origin refs/heads/develop:refs/remotes/origin/develop refs/heads/master:refs/remotes/origin/master
but that caused the remote master to be merged into develop..
– Superole
Jul 23 '13 at 15:44
1
Why would it be error-prone or inefficient? Git is intended to be customized like this. BTW, to avoid having to check out each branch, you may want to split yourpull
into afetch
followed by amerge
into each branch.
– jjlin
Jul 23 '13 at 19:53
@jjlin well if I can do it without checking out each branch that may help on the efficiency. It is error prone because the matrix of things that can go wrong and the effects it can have on the rest of the script is somewhat complex. I'm not saying it's infeasible to make it safe, but it would be a trade-off. So I'd prefer a builtin solution if it exists :)
– Superole
Jul 24 '13 at 7:39
add a comment |
In a repo I have multiple branches, among them "master" and "develop", which are set up to track remote branches "origin/master" and "origin/develop".
Is it possible to specify that I want both master and develop to be merged(fast-forwarded) at once?
When I do git pull
now I get something like this:
remote: Counting objects: 92, done.
remote: Compressing objects: 100% (56/56), done.
remote: Total 70 (delta 29), reused 28 (delta 8)
Unpacking objects: 100% (70/70), done.
From scm.my-site.com:my-repo
5386563..902fb45 develop -> origin/develop
d637d67..ba81fb2 master -> origin/master
Updating 5386563..902fb45
Fast-forward
all the remote branches are fetched, but only the branch I'm currently on is merged with its corresponding remote branch.
So I have to do git checkout master
...
Switched to branch 'master'
Your branch is behind 'origin/master' by 106 commits, and can be fast-forwarded.
...and then git pull
again, and then switch back to develop, to get the desired result.
I know I can make aliases/scripts that does these steps. But I want to avoid that if possible, as it is error prone and not very efficient.
Edit: ok let me rephrase that. My goal was not to discourage or frown upon script/alias customizing of git. I would just prefer a builtin solution if it exists :)
git
In a repo I have multiple branches, among them "master" and "develop", which are set up to track remote branches "origin/master" and "origin/develop".
Is it possible to specify that I want both master and develop to be merged(fast-forwarded) at once?
When I do git pull
now I get something like this:
remote: Counting objects: 92, done.
remote: Compressing objects: 100% (56/56), done.
remote: Total 70 (delta 29), reused 28 (delta 8)
Unpacking objects: 100% (70/70), done.
From scm.my-site.com:my-repo
5386563..902fb45 develop -> origin/develop
d637d67..ba81fb2 master -> origin/master
Updating 5386563..902fb45
Fast-forward
all the remote branches are fetched, but only the branch I'm currently on is merged with its corresponding remote branch.
So I have to do git checkout master
...
Switched to branch 'master'
Your branch is behind 'origin/master' by 106 commits, and can be fast-forwarded.
...and then git pull
again, and then switch back to develop, to get the desired result.
I know I can make aliases/scripts that does these steps. But I want to avoid that if possible, as it is error prone and not very efficient.
Edit: ok let me rephrase that. My goal was not to discourage or frown upon script/alias customizing of git. I would just prefer a builtin solution if it exists :)
git
git
edited Jul 24 '13 at 8:28
Superole
asked Jul 23 '13 at 15:37
SuperoleSuperole
91421017
91421017
I triedgit pull origin refs/heads/develop:refs/remotes/origin/develop refs/heads/master:refs/remotes/origin/master
but that caused the remote master to be merged into develop..
– Superole
Jul 23 '13 at 15:44
1
Why would it be error-prone or inefficient? Git is intended to be customized like this. BTW, to avoid having to check out each branch, you may want to split yourpull
into afetch
followed by amerge
into each branch.
– jjlin
Jul 23 '13 at 19:53
@jjlin well if I can do it without checking out each branch that may help on the efficiency. It is error prone because the matrix of things that can go wrong and the effects it can have on the rest of the script is somewhat complex. I'm not saying it's infeasible to make it safe, but it would be a trade-off. So I'd prefer a builtin solution if it exists :)
– Superole
Jul 24 '13 at 7:39
add a comment |
I triedgit pull origin refs/heads/develop:refs/remotes/origin/develop refs/heads/master:refs/remotes/origin/master
but that caused the remote master to be merged into develop..
– Superole
Jul 23 '13 at 15:44
1
Why would it be error-prone or inefficient? Git is intended to be customized like this. BTW, to avoid having to check out each branch, you may want to split yourpull
into afetch
followed by amerge
into each branch.
– jjlin
Jul 23 '13 at 19:53
@jjlin well if I can do it without checking out each branch that may help on the efficiency. It is error prone because the matrix of things that can go wrong and the effects it can have on the rest of the script is somewhat complex. I'm not saying it's infeasible to make it safe, but it would be a trade-off. So I'd prefer a builtin solution if it exists :)
– Superole
Jul 24 '13 at 7:39
I tried
git pull origin refs/heads/develop:refs/remotes/origin/develop refs/heads/master:refs/remotes/origin/master
but that caused the remote master to be merged into develop..– Superole
Jul 23 '13 at 15:44
I tried
git pull origin refs/heads/develop:refs/remotes/origin/develop refs/heads/master:refs/remotes/origin/master
but that caused the remote master to be merged into develop..– Superole
Jul 23 '13 at 15:44
1
1
Why would it be error-prone or inefficient? Git is intended to be customized like this. BTW, to avoid having to check out each branch, you may want to split your
pull
into a fetch
followed by a merge
into each branch.– jjlin
Jul 23 '13 at 19:53
Why would it be error-prone or inefficient? Git is intended to be customized like this. BTW, to avoid having to check out each branch, you may want to split your
pull
into a fetch
followed by a merge
into each branch.– jjlin
Jul 23 '13 at 19:53
@jjlin well if I can do it without checking out each branch that may help on the efficiency. It is error prone because the matrix of things that can go wrong and the effects it can have on the rest of the script is somewhat complex. I'm not saying it's infeasible to make it safe, but it would be a trade-off. So I'd prefer a builtin solution if it exists :)
– Superole
Jul 24 '13 at 7:39
@jjlin well if I can do it without checking out each branch that may help on the efficiency. It is error prone because the matrix of things that can go wrong and the effects it can have on the rest of the script is somewhat complex. I'm not saying it's infeasible to make it safe, but it would be a trade-off. So I'd prefer a builtin solution if it exists :)
– Superole
Jul 24 '13 at 7:39
add a comment |
3 Answers
3
active
oldest
votes
You can set up an alias that uses git fetch
with refspecs to fast-forward merge your branches with just one command. Set this up as an alias in your user .gitconfig
file:
[alias]
sync = "!sh -c 'git checkout --quiet --detach HEAD &&
git fetch origin master:master develop:develop ;
git checkout --quiet -'"
Usage: git sync
.
Here is why it works:
git checkout --quiet HEAD
directly checks out your current commit, putting you into detached head state. This way, if you're onmaster
ordevelop
, you detach your working copy from those branch pointers, allowing them to be moved (Git won't allow you to move the branch references while your working copy has them checked out).git fetch origin master:master develop:develop
uses refspecs withfetch
to fast-forward themaster
anddevelop
branches in your local repo. The syntax basically tells Git "here is a refspec of the form<source>:<destination>
, take<destination>
and fast-forward it to the same point as<source>
". So the sources in the alias are the branches fromorigin
, while the destinations are the local repo versions of those branches.Finally,
git checkout --quiet -
checks out the branch you were last on, regardless of whether or not there was a failure in the previous commands. So if you were onmaster
when you rangit sync
, and everything succeeds, you'll leave detached head state and check out the newly updatedmaster
.
See also my answer to git: update a local branch without checking it out?.
I don't quite understand the detached-magic here, why can't the pointer to master be moved when develop is checked out? ...anyway I tried this, and it seems to work except now I get "Your branch is ahead of 'origin/develop' by 1 commit."
– Superole
Aug 6 '13 at 8:06
...which is solved the next time I pull
– Superole
Aug 6 '13 at 8:08
@Superole which branch is ahead oforigin/develop
when you use the alias? It wouldn't make sense if it was your localdevelop
branch. Also, the pointer formaster
can be moved if it'sdevelop
that is checked out, the point is that if it'smaster
that is checked out, then you can't fast-forwardmaster
because that would affect your working copy, so that's why you detach the working copy from it first by usinggit checkout head
. I saw another answer that described it as "standing on a rock", you have to get off the rock before you can move it.
– 40XUserNotFound
Aug 6 '13 at 8:24
it was indeed my local develop. And the reason must be that this fetch does not update the tracking branches. As I understand it; a pull will fetch into origin/develop, and then merge that into develop.
– Superole
Aug 8 '13 at 9:31
It is very important that this answer causesfatal: bad config line xx in file xxx
. which is caused by the semicolon. you have to wrap the whole command in double quote to avoid this issue.
– William Leung
Feb 14 '17 at 3:57
add a comment |
Install git-up. It gives you the command git-up
which will pull all local branches in your repository.
sweet! I will check that out for sure.
– Superole
Nov 27 '15 at 14:01
2
heh :P The statements Windows support is predictably absent. and a rigorous proof has yet to be formulated that it will definitely not mess with your git setup, delete data or post inane drivel to Hacker News on your behalf., combined with the need for Ruby, drove me away. I like the concept though.
– Superole
Nov 27 '15 at 15:30
Glad there's a method at all ... kinda sucky, though that every single method requires some third-party tool. Such as this one and the ones with some shell command "recipe" or an alias making use of a particular (platform-specific) shell.
– 0xC0000022L
Feb 14 '18 at 18:48
add a comment |
It seems that there is no builtin option for git to pull into multiple branches.
At least not in version 1.8.0. although @Cupcake's answer is close to it.
However @jjlin's comment made me realize that at least I don't need to pull twice.
So a slightly more efficient sequence would be:
git pull
git checkout master
git merge origin/master
git checkout -
Inevitably I ended up creating an alias, but decided to leave the pull out of it, and focused on just fast-forwarding a different branch.
[alias]
ffwd = "!_() { git checkout $1 && git merge --ff-only origin/$1 && git checkout -; }; _"
Of course, with no testing this alias assumes that I supply a valid name of a ff'able branch as 1st argument, and has undefined behaviour otherwise. It is also not optimal for use-cases with more than two branches, but it will get me what I need for now.
git pull
git ffwd master
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "3"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsuperuser.com%2fquestions%2f623217%2fhow-to-pull-into-multiple-branches-at-once-with-git%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
You can set up an alias that uses git fetch
with refspecs to fast-forward merge your branches with just one command. Set this up as an alias in your user .gitconfig
file:
[alias]
sync = "!sh -c 'git checkout --quiet --detach HEAD &&
git fetch origin master:master develop:develop ;
git checkout --quiet -'"
Usage: git sync
.
Here is why it works:
git checkout --quiet HEAD
directly checks out your current commit, putting you into detached head state. This way, if you're onmaster
ordevelop
, you detach your working copy from those branch pointers, allowing them to be moved (Git won't allow you to move the branch references while your working copy has them checked out).git fetch origin master:master develop:develop
uses refspecs withfetch
to fast-forward themaster
anddevelop
branches in your local repo. The syntax basically tells Git "here is a refspec of the form<source>:<destination>
, take<destination>
and fast-forward it to the same point as<source>
". So the sources in the alias are the branches fromorigin
, while the destinations are the local repo versions of those branches.Finally,
git checkout --quiet -
checks out the branch you were last on, regardless of whether or not there was a failure in the previous commands. So if you were onmaster
when you rangit sync
, and everything succeeds, you'll leave detached head state and check out the newly updatedmaster
.
See also my answer to git: update a local branch without checking it out?.
I don't quite understand the detached-magic here, why can't the pointer to master be moved when develop is checked out? ...anyway I tried this, and it seems to work except now I get "Your branch is ahead of 'origin/develop' by 1 commit."
– Superole
Aug 6 '13 at 8:06
...which is solved the next time I pull
– Superole
Aug 6 '13 at 8:08
@Superole which branch is ahead oforigin/develop
when you use the alias? It wouldn't make sense if it was your localdevelop
branch. Also, the pointer formaster
can be moved if it'sdevelop
that is checked out, the point is that if it'smaster
that is checked out, then you can't fast-forwardmaster
because that would affect your working copy, so that's why you detach the working copy from it first by usinggit checkout head
. I saw another answer that described it as "standing on a rock", you have to get off the rock before you can move it.
– 40XUserNotFound
Aug 6 '13 at 8:24
it was indeed my local develop. And the reason must be that this fetch does not update the tracking branches. As I understand it; a pull will fetch into origin/develop, and then merge that into develop.
– Superole
Aug 8 '13 at 9:31
It is very important that this answer causesfatal: bad config line xx in file xxx
. which is caused by the semicolon. you have to wrap the whole command in double quote to avoid this issue.
– William Leung
Feb 14 '17 at 3:57
add a comment |
You can set up an alias that uses git fetch
with refspecs to fast-forward merge your branches with just one command. Set this up as an alias in your user .gitconfig
file:
[alias]
sync = "!sh -c 'git checkout --quiet --detach HEAD &&
git fetch origin master:master develop:develop ;
git checkout --quiet -'"
Usage: git sync
.
Here is why it works:
git checkout --quiet HEAD
directly checks out your current commit, putting you into detached head state. This way, if you're onmaster
ordevelop
, you detach your working copy from those branch pointers, allowing them to be moved (Git won't allow you to move the branch references while your working copy has them checked out).git fetch origin master:master develop:develop
uses refspecs withfetch
to fast-forward themaster
anddevelop
branches in your local repo. The syntax basically tells Git "here is a refspec of the form<source>:<destination>
, take<destination>
and fast-forward it to the same point as<source>
". So the sources in the alias are the branches fromorigin
, while the destinations are the local repo versions of those branches.Finally,
git checkout --quiet -
checks out the branch you were last on, regardless of whether or not there was a failure in the previous commands. So if you were onmaster
when you rangit sync
, and everything succeeds, you'll leave detached head state and check out the newly updatedmaster
.
See also my answer to git: update a local branch without checking it out?.
I don't quite understand the detached-magic here, why can't the pointer to master be moved when develop is checked out? ...anyway I tried this, and it seems to work except now I get "Your branch is ahead of 'origin/develop' by 1 commit."
– Superole
Aug 6 '13 at 8:06
...which is solved the next time I pull
– Superole
Aug 6 '13 at 8:08
@Superole which branch is ahead oforigin/develop
when you use the alias? It wouldn't make sense if it was your localdevelop
branch. Also, the pointer formaster
can be moved if it'sdevelop
that is checked out, the point is that if it'smaster
that is checked out, then you can't fast-forwardmaster
because that would affect your working copy, so that's why you detach the working copy from it first by usinggit checkout head
. I saw another answer that described it as "standing on a rock", you have to get off the rock before you can move it.
– 40XUserNotFound
Aug 6 '13 at 8:24
it was indeed my local develop. And the reason must be that this fetch does not update the tracking branches. As I understand it; a pull will fetch into origin/develop, and then merge that into develop.
– Superole
Aug 8 '13 at 9:31
It is very important that this answer causesfatal: bad config line xx in file xxx
. which is caused by the semicolon. you have to wrap the whole command in double quote to avoid this issue.
– William Leung
Feb 14 '17 at 3:57
add a comment |
You can set up an alias that uses git fetch
with refspecs to fast-forward merge your branches with just one command. Set this up as an alias in your user .gitconfig
file:
[alias]
sync = "!sh -c 'git checkout --quiet --detach HEAD &&
git fetch origin master:master develop:develop ;
git checkout --quiet -'"
Usage: git sync
.
Here is why it works:
git checkout --quiet HEAD
directly checks out your current commit, putting you into detached head state. This way, if you're onmaster
ordevelop
, you detach your working copy from those branch pointers, allowing them to be moved (Git won't allow you to move the branch references while your working copy has them checked out).git fetch origin master:master develop:develop
uses refspecs withfetch
to fast-forward themaster
anddevelop
branches in your local repo. The syntax basically tells Git "here is a refspec of the form<source>:<destination>
, take<destination>
and fast-forward it to the same point as<source>
". So the sources in the alias are the branches fromorigin
, while the destinations are the local repo versions of those branches.Finally,
git checkout --quiet -
checks out the branch you were last on, regardless of whether or not there was a failure in the previous commands. So if you were onmaster
when you rangit sync
, and everything succeeds, you'll leave detached head state and check out the newly updatedmaster
.
See also my answer to git: update a local branch without checking it out?.
You can set up an alias that uses git fetch
with refspecs to fast-forward merge your branches with just one command. Set this up as an alias in your user .gitconfig
file:
[alias]
sync = "!sh -c 'git checkout --quiet --detach HEAD &&
git fetch origin master:master develop:develop ;
git checkout --quiet -'"
Usage: git sync
.
Here is why it works:
git checkout --quiet HEAD
directly checks out your current commit, putting you into detached head state. This way, if you're onmaster
ordevelop
, you detach your working copy from those branch pointers, allowing them to be moved (Git won't allow you to move the branch references while your working copy has them checked out).git fetch origin master:master develop:develop
uses refspecs withfetch
to fast-forward themaster
anddevelop
branches in your local repo. The syntax basically tells Git "here is a refspec of the form<source>:<destination>
, take<destination>
and fast-forward it to the same point as<source>
". So the sources in the alias are the branches fromorigin
, while the destinations are the local repo versions of those branches.Finally,
git checkout --quiet -
checks out the branch you were last on, regardless of whether or not there was a failure in the previous commands. So if you were onmaster
when you rangit sync
, and everything succeeds, you'll leave detached head state and check out the newly updatedmaster
.
See also my answer to git: update a local branch without checking it out?.
edited Jan 30 at 5:24
Douglas Royds
1054
1054
answered Aug 3 '13 at 14:11
40XUserNotFound40XUserNotFound
224311
224311
I don't quite understand the detached-magic here, why can't the pointer to master be moved when develop is checked out? ...anyway I tried this, and it seems to work except now I get "Your branch is ahead of 'origin/develop' by 1 commit."
– Superole
Aug 6 '13 at 8:06
...which is solved the next time I pull
– Superole
Aug 6 '13 at 8:08
@Superole which branch is ahead oforigin/develop
when you use the alias? It wouldn't make sense if it was your localdevelop
branch. Also, the pointer formaster
can be moved if it'sdevelop
that is checked out, the point is that if it'smaster
that is checked out, then you can't fast-forwardmaster
because that would affect your working copy, so that's why you detach the working copy from it first by usinggit checkout head
. I saw another answer that described it as "standing on a rock", you have to get off the rock before you can move it.
– 40XUserNotFound
Aug 6 '13 at 8:24
it was indeed my local develop. And the reason must be that this fetch does not update the tracking branches. As I understand it; a pull will fetch into origin/develop, and then merge that into develop.
– Superole
Aug 8 '13 at 9:31
It is very important that this answer causesfatal: bad config line xx in file xxx
. which is caused by the semicolon. you have to wrap the whole command in double quote to avoid this issue.
– William Leung
Feb 14 '17 at 3:57
add a comment |
I don't quite understand the detached-magic here, why can't the pointer to master be moved when develop is checked out? ...anyway I tried this, and it seems to work except now I get "Your branch is ahead of 'origin/develop' by 1 commit."
– Superole
Aug 6 '13 at 8:06
...which is solved the next time I pull
– Superole
Aug 6 '13 at 8:08
@Superole which branch is ahead oforigin/develop
when you use the alias? It wouldn't make sense if it was your localdevelop
branch. Also, the pointer formaster
can be moved if it'sdevelop
that is checked out, the point is that if it'smaster
that is checked out, then you can't fast-forwardmaster
because that would affect your working copy, so that's why you detach the working copy from it first by usinggit checkout head
. I saw another answer that described it as "standing on a rock", you have to get off the rock before you can move it.
– 40XUserNotFound
Aug 6 '13 at 8:24
it was indeed my local develop. And the reason must be that this fetch does not update the tracking branches. As I understand it; a pull will fetch into origin/develop, and then merge that into develop.
– Superole
Aug 8 '13 at 9:31
It is very important that this answer causesfatal: bad config line xx in file xxx
. which is caused by the semicolon. you have to wrap the whole command in double quote to avoid this issue.
– William Leung
Feb 14 '17 at 3:57
I don't quite understand the detached-magic here, why can't the pointer to master be moved when develop is checked out? ...anyway I tried this, and it seems to work except now I get "Your branch is ahead of 'origin/develop' by 1 commit."
– Superole
Aug 6 '13 at 8:06
I don't quite understand the detached-magic here, why can't the pointer to master be moved when develop is checked out? ...anyway I tried this, and it seems to work except now I get "Your branch is ahead of 'origin/develop' by 1 commit."
– Superole
Aug 6 '13 at 8:06
...which is solved the next time I pull
– Superole
Aug 6 '13 at 8:08
...which is solved the next time I pull
– Superole
Aug 6 '13 at 8:08
@Superole which branch is ahead of
origin/develop
when you use the alias? It wouldn't make sense if it was your local develop
branch. Also, the pointer for master
can be moved if it's develop
that is checked out, the point is that if it's master
that is checked out, then you can't fast-forward master
because that would affect your working copy, so that's why you detach the working copy from it first by using git checkout head
. I saw another answer that described it as "standing on a rock", you have to get off the rock before you can move it.– 40XUserNotFound
Aug 6 '13 at 8:24
@Superole which branch is ahead of
origin/develop
when you use the alias? It wouldn't make sense if it was your local develop
branch. Also, the pointer for master
can be moved if it's develop
that is checked out, the point is that if it's master
that is checked out, then you can't fast-forward master
because that would affect your working copy, so that's why you detach the working copy from it first by using git checkout head
. I saw another answer that described it as "standing on a rock", you have to get off the rock before you can move it.– 40XUserNotFound
Aug 6 '13 at 8:24
it was indeed my local develop. And the reason must be that this fetch does not update the tracking branches. As I understand it; a pull will fetch into origin/develop, and then merge that into develop.
– Superole
Aug 8 '13 at 9:31
it was indeed my local develop. And the reason must be that this fetch does not update the tracking branches. As I understand it; a pull will fetch into origin/develop, and then merge that into develop.
– Superole
Aug 8 '13 at 9:31
It is very important that this answer causes
fatal: bad config line xx in file xxx
. which is caused by the semicolon. you have to wrap the whole command in double quote to avoid this issue.– William Leung
Feb 14 '17 at 3:57
It is very important that this answer causes
fatal: bad config line xx in file xxx
. which is caused by the semicolon. you have to wrap the whole command in double quote to avoid this issue.– William Leung
Feb 14 '17 at 3:57
add a comment |
Install git-up. It gives you the command git-up
which will pull all local branches in your repository.
sweet! I will check that out for sure.
– Superole
Nov 27 '15 at 14:01
2
heh :P The statements Windows support is predictably absent. and a rigorous proof has yet to be formulated that it will definitely not mess with your git setup, delete data or post inane drivel to Hacker News on your behalf., combined with the need for Ruby, drove me away. I like the concept though.
– Superole
Nov 27 '15 at 15:30
Glad there's a method at all ... kinda sucky, though that every single method requires some third-party tool. Such as this one and the ones with some shell command "recipe" or an alias making use of a particular (platform-specific) shell.
– 0xC0000022L
Feb 14 '18 at 18:48
add a comment |
Install git-up. It gives you the command git-up
which will pull all local branches in your repository.
sweet! I will check that out for sure.
– Superole
Nov 27 '15 at 14:01
2
heh :P The statements Windows support is predictably absent. and a rigorous proof has yet to be formulated that it will definitely not mess with your git setup, delete data or post inane drivel to Hacker News on your behalf., combined with the need for Ruby, drove me away. I like the concept though.
– Superole
Nov 27 '15 at 15:30
Glad there's a method at all ... kinda sucky, though that every single method requires some third-party tool. Such as this one and the ones with some shell command "recipe" or an alias making use of a particular (platform-specific) shell.
– 0xC0000022L
Feb 14 '18 at 18:48
add a comment |
Install git-up. It gives you the command git-up
which will pull all local branches in your repository.
Install git-up. It gives you the command git-up
which will pull all local branches in your repository.
answered Nov 17 '15 at 8:10
BillyTomBillyTom
1212
1212
sweet! I will check that out for sure.
– Superole
Nov 27 '15 at 14:01
2
heh :P The statements Windows support is predictably absent. and a rigorous proof has yet to be formulated that it will definitely not mess with your git setup, delete data or post inane drivel to Hacker News on your behalf., combined with the need for Ruby, drove me away. I like the concept though.
– Superole
Nov 27 '15 at 15:30
Glad there's a method at all ... kinda sucky, though that every single method requires some third-party tool. Such as this one and the ones with some shell command "recipe" or an alias making use of a particular (platform-specific) shell.
– 0xC0000022L
Feb 14 '18 at 18:48
add a comment |
sweet! I will check that out for sure.
– Superole
Nov 27 '15 at 14:01
2
heh :P The statements Windows support is predictably absent. and a rigorous proof has yet to be formulated that it will definitely not mess with your git setup, delete data or post inane drivel to Hacker News on your behalf., combined with the need for Ruby, drove me away. I like the concept though.
– Superole
Nov 27 '15 at 15:30
Glad there's a method at all ... kinda sucky, though that every single method requires some third-party tool. Such as this one and the ones with some shell command "recipe" or an alias making use of a particular (platform-specific) shell.
– 0xC0000022L
Feb 14 '18 at 18:48
sweet! I will check that out for sure.
– Superole
Nov 27 '15 at 14:01
sweet! I will check that out for sure.
– Superole
Nov 27 '15 at 14:01
2
2
heh :P The statements Windows support is predictably absent. and a rigorous proof has yet to be formulated that it will definitely not mess with your git setup, delete data or post inane drivel to Hacker News on your behalf., combined with the need for Ruby, drove me away. I like the concept though.
– Superole
Nov 27 '15 at 15:30
heh :P The statements Windows support is predictably absent. and a rigorous proof has yet to be formulated that it will definitely not mess with your git setup, delete data or post inane drivel to Hacker News on your behalf., combined with the need for Ruby, drove me away. I like the concept though.
– Superole
Nov 27 '15 at 15:30
Glad there's a method at all ... kinda sucky, though that every single method requires some third-party tool. Such as this one and the ones with some shell command "recipe" or an alias making use of a particular (platform-specific) shell.
– 0xC0000022L
Feb 14 '18 at 18:48
Glad there's a method at all ... kinda sucky, though that every single method requires some third-party tool. Such as this one and the ones with some shell command "recipe" or an alias making use of a particular (platform-specific) shell.
– 0xC0000022L
Feb 14 '18 at 18:48
add a comment |
It seems that there is no builtin option for git to pull into multiple branches.
At least not in version 1.8.0. although @Cupcake's answer is close to it.
However @jjlin's comment made me realize that at least I don't need to pull twice.
So a slightly more efficient sequence would be:
git pull
git checkout master
git merge origin/master
git checkout -
Inevitably I ended up creating an alias, but decided to leave the pull out of it, and focused on just fast-forwarding a different branch.
[alias]
ffwd = "!_() { git checkout $1 && git merge --ff-only origin/$1 && git checkout -; }; _"
Of course, with no testing this alias assumes that I supply a valid name of a ff'able branch as 1st argument, and has undefined behaviour otherwise. It is also not optimal for use-cases with more than two branches, but it will get me what I need for now.
git pull
git ffwd master
add a comment |
It seems that there is no builtin option for git to pull into multiple branches.
At least not in version 1.8.0. although @Cupcake's answer is close to it.
However @jjlin's comment made me realize that at least I don't need to pull twice.
So a slightly more efficient sequence would be:
git pull
git checkout master
git merge origin/master
git checkout -
Inevitably I ended up creating an alias, but decided to leave the pull out of it, and focused on just fast-forwarding a different branch.
[alias]
ffwd = "!_() { git checkout $1 && git merge --ff-only origin/$1 && git checkout -; }; _"
Of course, with no testing this alias assumes that I supply a valid name of a ff'able branch as 1st argument, and has undefined behaviour otherwise. It is also not optimal for use-cases with more than two branches, but it will get me what I need for now.
git pull
git ffwd master
add a comment |
It seems that there is no builtin option for git to pull into multiple branches.
At least not in version 1.8.0. although @Cupcake's answer is close to it.
However @jjlin's comment made me realize that at least I don't need to pull twice.
So a slightly more efficient sequence would be:
git pull
git checkout master
git merge origin/master
git checkout -
Inevitably I ended up creating an alias, but decided to leave the pull out of it, and focused on just fast-forwarding a different branch.
[alias]
ffwd = "!_() { git checkout $1 && git merge --ff-only origin/$1 && git checkout -; }; _"
Of course, with no testing this alias assumes that I supply a valid name of a ff'able branch as 1st argument, and has undefined behaviour otherwise. It is also not optimal for use-cases with more than two branches, but it will get me what I need for now.
git pull
git ffwd master
It seems that there is no builtin option for git to pull into multiple branches.
At least not in version 1.8.0. although @Cupcake's answer is close to it.
However @jjlin's comment made me realize that at least I don't need to pull twice.
So a slightly more efficient sequence would be:
git pull
git checkout master
git merge origin/master
git checkout -
Inevitably I ended up creating an alias, but decided to leave the pull out of it, and focused on just fast-forwarding a different branch.
[alias]
ffwd = "!_() { git checkout $1 && git merge --ff-only origin/$1 && git checkout -; }; _"
Of course, with no testing this alias assumes that I supply a valid name of a ff'able branch as 1st argument, and has undefined behaviour otherwise. It is also not optimal for use-cases with more than two branches, but it will get me what I need for now.
git pull
git ffwd master
edited Mar 20 '17 at 10:17
Community♦
1
1
answered Aug 8 '13 at 11:27
SuperoleSuperole
91421017
91421017
add a comment |
add a comment |
Thanks for contributing an answer to Super User!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsuperuser.com%2fquestions%2f623217%2fhow-to-pull-into-multiple-branches-at-once-with-git%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
I tried
git pull origin refs/heads/develop:refs/remotes/origin/develop refs/heads/master:refs/remotes/origin/master
but that caused the remote master to be merged into develop..– Superole
Jul 23 '13 at 15:44
1
Why would it be error-prone or inefficient? Git is intended to be customized like this. BTW, to avoid having to check out each branch, you may want to split your
pull
into afetch
followed by amerge
into each branch.– jjlin
Jul 23 '13 at 19:53
@jjlin well if I can do it without checking out each branch that may help on the efficiency. It is error prone because the matrix of things that can go wrong and the effects it can have on the rest of the script is somewhat complex. I'm not saying it's infeasible to make it safe, but it would be a trade-off. So I'd prefer a builtin solution if it exists :)
– Superole
Jul 24 '13 at 7:39