I’m trying to submit patches to https://github.com/mbostock/d3. Only what I want to patch is in the gh-pages branch, a special magic branch on github that is published as a website. Forking and modifying a branch is confusing if you don’t understand git. Here’s what works in my shell, after forking the repository:
# Get a copy of the forked repo $ git clone firstname.lastname@example.org:NelsonMinar/d3.git Cloning into d3... # Link in the upstream repo you forked $ cd d3 $ git remote add upstream https://github.com/mbostock/d3.git $ git fetch upstream From https://github.com/mbostock/d3 * [new branch] gh-pages -> upstream/gh-pages * [new branch] master -> upstream/master * [new branch] mbostock-master -> upstream/mbostock-master # Create a local branch, somehow linked to the upstream's branch $ git checkout -b gh-pages origin/gh-pages Branch gh-pages set up to track remote branch gh-pages from origin. Switched to a new branch 'gh-pages' # Make your changes and commit them locally $ ed README.txt $ git commit -a -m testing # Push to your fork on github $ git push To email@example.com:NelsonMinar/d3.git 0d1679a..d351228 gh-pages -> gh-pages
The magic step is that checkout line. Other similar things like git branch gh-pages; git checkout origin/gh-pages don’t work and you can end up in weird states like “You are in ‘detached HEAD’ state.” I don’t really understand what all the working command is doing (I’ve got Matt to think for the code to copypasta) but I’m hopeful after reading the git docs on branches and remotes maybe it’ll make more sense.