If you want the local branch tips to get re-pointed after git fetch, you need some additional steps.
More concretely, suppose the github repo has branches D, B, C, and master (the reason for this odd branch-name-set will be clear in a moment). You are on host devhost and you are in a repo where origin is the github repo. You do git fetch, which brings over all the objects and updates origin/D, origin/B, origin/C, and origin/master. So far so good. But now you say you want something to happen, on devhost, to local branches D, B, C, and/or master?
I have these obvious (to me anyway) questions:
- Why do you want the tips of all branches updated?
- What if some branch (e.g.,
B) has commits that the remote (github) repo lacks? Should they be merged, rebased, or ...?
- What if you're on some branch (e.g.,
C) and the work directory and/or index are modified but not committed?
- What if the remote repo has new branches added (
A) and/or branches deleted (D)?
If the answer to (1) is "because devhost is not actually for development, but rather is a local mirror that simply keeps a locally-available copy of the github repo so that all our actual developers can read from it quickly instead of reading slowly from github", then you want a "mirror" rather than a "normal" repo. It should not have a work directory, and perhaps it should not accept pushes either, in which case the remaining questions just go away.
If there is some other answer, (2-4) become problematic.
In any case, here's a way to tackle updating local refs based on remote refs (after running git fetch -p for instance):
for ref in $(git for-each-ref refs/remotes/origin/ --format '%(refname)'); do
local=${ref#refs/remotes/origin/}
... code here ...
done
What goes in the ... code here ... section depends on the answers to questions (2-4).