git workflow for D
Jesse Phillips
Jesse.K.Phillips+D at gmail.com
Tue Dec 5 15:44:21 UTC 2017
I'm going to answer with something that others may not agree
with, maybe they can enlighten me, but let me first get a generic
principle of git and answer some questions.
Git has 2 types of branches, local branches (you know them as
just branches) and remotes (which have their own local branches).
I say this to remove the confusion with having an original
repository, a forked repository, and a cloned repository. When it
comes to interactions with these repositories the only difference
from your local branches is that you can't interact directly with
them (i.e. you can't commit to them) and the interactions require
specifying the remote location of the branch.
Some of your other questions are about GitHub and Forking. Git
doesn't know what a fork is, but GitHub ties a pull request to a
branch. This means you can update/change your pull request by
updating/changing your branch. From that you should realize each
pull request needs its own branch.
Back to git remotes. I'm sure you're aware of the commonly named
"origin" remote and possible the second common "upstream." When
you're dealing with many remotes your local branches can get
complicated. For example many people utilize 'master' as a
*tracking* branch to "origin" well, "upstream" if there is one.
I'm to the point that in this situation my recommendation is just
delete your 'master' branch both local and "origin." Don't worry
you can bring it back if you need it, you won't need it.
Here is the thing, you already have two, maybe 3 master branches
'master' 'origin/master' 'upstream/master' these are local
branches (they are special in that you can't commit to them). And
these are also your true tracking branches, whenever you
fetch/pull from your remote these branches are updated, they will
always reflect the branch of the remote and they will never
conflict during updates. You can always create your own master $
git branch master upstream/master
I want to note that 'origin/master' is different from such
commands as `$ git push origin master` because in the first you
are referring to a local branch and the second you reference your
remote followed by your remotes local branch (actually I could be
wrong here because the full syntax is `$ git push origin
master:master` where the left: is your local and :right is the
remote local branch [and note that `push origin :master` would
delete the remote master branch because you're push no branch to
it.).
I hope that this along with answers other have given will help
you to answer all of your questions.
More information about the Digitalmars-d-learn
mailing list