git clone --origin unidata git@github.com:Unidata/thredds.git (for ssh)or
git clone --origin unidata https://github.com/Unidata/thredds.git (for http)Note that these commands reference the Unidata repository.
Normally in git, the remote repository you clone from is automatically named 'origin'. To help with any confusion when making pull requests, this commands above rename the remote repository to 'unidata'.
git clone --origin me git@github.com:or/thredds.git (for ssh)
git clone --origin me https://github.com/,my-github-user-name>/thredds.git (for http)Now you are all set!
git pull unidata master
git checkout -b myworkAs of this point, the branch 'mywork' is local. To make this branch part of your personal GitHub Remote repository, use the following command:
git push -u me myworkNow git (on your local machine) is setup to a point where you can start hacking on the code and commit changes to your personal GitHub repository. At any point, you may add commits to your local copy of the repository by using:
git commitIf you would like these changes to be stored on your personal remote repository, simply use:
git push me myworkOnce you are satisified with your work, there is one last step to complete before submitting the pull request - clean up the history.
To clean up your history, use the
git rebase -icommand, which will open an editor:
sarms@flip: [mywork] git rebase -i pick 083508e first commit of my really cool feature or bug fix! pick 9bcba01 Oops missed this one thing. This commit fixes that. # Rebase 083508e..9bcba01 onto 083508e (2 command(s)) # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commitmessage # x, exec = run command (the rest of the line) using shell # d, drop = remove commit # # These lines can be re-ordered; they are executed from top to bottom. # # If you remove a line here THAT COMMIT WILL BE LOST. # # However, if you remove everything, the rebase will be aborted. # # Note that empty commits are commented out
Based on my commit messages, you can see that commit1' fixed a mistake from my first commit. It would be nice to 'squash' those changes into the first commit, so that the official history does not show my mistake..uhhh...this extra commit. To do so, edit the text to change the second commits 'pick' to 'squash':
h pick 083508e first commit of my really cool feature or bug fix! squash 9bcba01 Oops missed this one thing. This commit fixes that. # Rebase 083508e..9bcba01 onto 083508e (2 command(s)) # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commitmessage # x, exec = run command (the rest of the line) using shell # d, drop = remove commit # # These lines can be re-ordered; they are executed from top to bottom. # # If you remove a line here THAT COMMIT WILL BE LOST. # # However, if you remove everything, the rebase will be aborted. # # Note that empty commits are commented out
Once you have marked the commits to be squashed and exited the edit, you will prompted to change the commit message for the new, squashed, mega commit:# This is a combination of 2 commits. # The first commit's message is: first commit of my really cool feature or bug fix! # This is the 2nd commit message: Oops missed this one thing. This commit fixes that. #Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # # Date: Thu Oct 15 09:59:23 2015 -0600 # # interactive rebase in progress; onto 083508e # Last commands done (2 commands done): # pick 09134d5 first commit of my really cool feature or bug fix! # squash 9bcba01 Oops missed this one thing. This commit fixes that. # No commands remaining. # You are currently editing a commit while rebasing branch 'mywork' on '0835 08e'. # # Changes to be committed: ...
Edit the two commit messages into a single message that describes the overall change:Once you have and exit, you will have a change to change the commit message for the new, squashed, mega commit:
h Really cool feature or bug fix. Addresses the github issue Unidata/thredds#1 #Please enter the commit message for your changes. Lines starting # withl be ignored, and an empty message aborts the commit. # # Date: Thu Oct 15 09:59:23 2015 -0600 # # interactive rebase in progress; onto 083508e # Last commands done (2 commands done): # pick 09134d5 first commit of my really cool feature or bug fix! # squash 9bcba01 Oops missed this one thing. This commit fixes that. # No commands remaining. # You are currently editing a commit while rebasing branch 'mywork' on '0835 08e'. # # Changes to be committed: ...
Now, when you look at your git commit logs, you will see:commit 805b4723c4a2cbbed240354332cd7af57559a1b9 Author: Sean Arms
Note that the commit conains the texta/thredds#1'. This is a cool github trick that will allow you to reference GitHub issues within your commit messages. When viewed on github.com, this will be turned into a hyperlink to the issue. While not every contribution will address an issue, please use this feature if your contribution does!
ush --force me mywork