From 3943983d0fa84c965bd81952705bc1e84fb9fbc3 Mon Sep 17 00:00:00 2001 From: Yang Su Date: Fri, 29 Mar 2013 03:33:51 -0700 Subject: [PATCH 1/2] Create gh-pages branch via GitHub --- images/body-bg.png | Bin 0 -> 8859 bytes images/highlight-bg.jpg | Bin 0 -> 34222 bytes images/hr.png | Bin 0 -> 1037 bytes images/octocat-icon.png | Bin 0 -> 1651 bytes images/tar-gz-icon.png | Bin 0 -> 1671 bytes images/zip-icon.png | Bin 0 -> 1661 bytes index.html | 193 ++++++++++++++++++ javascripts/main.js | 1 + params.json | 1 + stylesheets/print.css | 226 +++++++++++++++++++++ stylesheets/pygment_trac.css | 69 +++++++ stylesheets/stylesheet.css | 371 +++++++++++++++++++++++++++++++++++ 12 files changed, 861 insertions(+) create mode 100644 images/body-bg.png create mode 100644 images/highlight-bg.jpg create mode 100644 images/hr.png create mode 100644 images/octocat-icon.png create mode 100644 images/tar-gz-icon.png create mode 100644 images/zip-icon.png create mode 100644 index.html create mode 100644 javascripts/main.js create mode 100644 params.json create mode 100644 stylesheets/print.css create mode 100644 stylesheets/pygment_trac.css create mode 100644 stylesheets/stylesheet.css diff --git a/images/body-bg.png b/images/body-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..d0618fe749178e814554f19fd158dea90020252d GIT binary patch literal 8859 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 DGStm7 literal 0 HcmV?d00001 diff --git a/images/hr.png b/images/hr.png new file mode 100644 index 0000000000000000000000000000000000000000..6c723a5602e14caa5c1527f3226d383dc83db6bd GIT binary patch literal 1037 zcmaJ=O=#3W6ppP(DfA#BSfMzksBP)ycawF8u4S8S+eOos-GGZH(`4F>Z89;Lx@kQW zdXeJMs}{wJ7kd-LA_{_7ym;tIym;!NSV8EeAUN6XZauh$A$c>r?|a{Td2fAYYNDt6 zd^f`|J;h1A#4sICXndmU6n#J5Kg-ikFDX<=8PAcL6(T0@;8_HUo;8n3$a0qNZle)~ z>6~`W3aJ=3pp8AwN^-c^3n-dlMn>bnvKJ5mvuNJ+bL`KpcPwz79D7qS1S8N;)ty`k zQF&#`v{x4Ftiz6810yk{1Rf$5h`mKWf^m+m^FkUY$2<$_DP$qX9*L?LGeE;30tzRm zY(W%(s&ZmlQB`pmNP;Nw0$plKOhZM5QU)|0mR1X$Iat!i8@1>z$5sgmAkWuoHLfOe zIGpFjY&M&4NK%Ssq@rb?SaHga`kM?oitNx0h>LxYFj}*CiR4(S^yms+(4zIDhE3Ek zKDGj0o(%|yfaf2!xTvLjML$9n%s9GS}j;!7yPOQB7F++2TBDu7yuEP_K584fa+@981e_uIs?OtVl{m%4Q@jEs6zkOwY@OLYf|Fijp4Jnphp%OCIt`6YCsf^KG$7 z-*^G7tfSDqhn(>cd!X(QblYpmwB>7Ho%UL;w#D*P44-ttUtQ5WqOF#MtsbYF)|4Qh zjz&mlVDsTNN9V^Z>UlH%x?^tlFhbYb?*||IhKCM5Kf8Fk0~~&sex2TTgpC(J4*mO= zclX|($v%4f<@?sbt)0D3^7`}qYTq~YRe7TK%AHKGyE^n#+j#TxU#ywo|pap6}o NpvA(JzBzV#?GKcZMQ8v3 literal 0 HcmV?d00001 diff --git a/images/octocat-icon.png b/images/octocat-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f0ba137d268da4921d9f4b5905bed9e724c45770 GIT binary patch literal 1651 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 S7rUr~Dg;kgKbLh*2~7YV%7O|2 literal 0 HcmV?d00001 diff --git a/index.html b/index.html new file mode 100644 index 0000000..03407c4 --- /dev/null +++ b/index.html @@ -0,0 +1,193 @@ + + + + + + + + + + + Pull Request Tutorial by yangsu + + + +
+
+ +
+

Pull Request Tutorial

+

A Visual Guide to Pull Requests

+
+ +
+ Download .zip + Download .tar.gz + View on GitHub +
+ +
+ +
+

Pull Request Tutorial

+ +

What is a Pull Request?

+ +

From Github's Using Pull Requests Page

+ +
+

Pull requests let you tell others about changes you've pushed to a GitHub repository. Once a pull request is sent, interested parties can review the set of changes, discuss potential modifications, and even push follow-up commits if necessary.

+
+ +

Pull Requests are commonly used by teams and organizations collaborating using the Shared Repository Model, where everyone shares a single repository and topic branches are used to develop features and isolate changes. Many open source projects on Github use pull requests to manage changes from contributors as they are useful in providing a way to notify project maintainers about changes one has made and in initiating code review and general discussion about a set of changes before being merged into the main branch.

+ +

Here's an example pull request from jQuery's github repo.

+ +

Creating a Pull Request

+ +

There are 2 main work flows when dealing with pull requests:

+ +
    +
  1. Pull Request from a forked repository +
  2. +
  3. Pull Request from a branch within a repository
  4. +

Here we are going to focus on 2.

+ +

Creating a Topical Branch

+ +

First, we will need to create a branch from the latest commit on master. Make sure your repository is up to date first using

+ +
git pull origin master
+
+ +

Note: git pull does a git fetch followed by a git merge to update the local repo with the remote repo. For a more detailed explanation, see this stackoverflow post.

+ +

To create a branch, use git checkout -b <new-branch-name> [<base-branch-name>], where base-branch-name is optional and defaults to master. I'm going to create a new branch called pull-request-demo from the master branch and push it to github.

+ +
git checkout -b pull-request-demo
+git push origin pull-request-demo
+
+ +

Creating a Pull Request

+ +

To create a pull request, you must have changes committed to the your new branch.

+ +

Go to the repository page on github. And click on "Pull Request" button in the repo header.

+ +

Pull Request Button

+ +

Pick the branch you wish to have merged using the "Head branch" dropdown. You should leave the rest of the fields as is, unless you are working from a remote branch. In that case, please refer to the remote branch pull request guide.

+ +

Head Branch Dropdown

+ +

Enter a title and description for your pull request. Remember you can use Github Flavored Markdown in the description and comments

+ +

Title and Description

+ +

Finally, click on the green "Send pull request" button to finish creating the pull request.

+ +

Send Pull Request

+ +

You should now see an open pull request.

+ +

Open Pull Request

+ +

Using a Pull Request

+ +

You can write comments related to a pull request,

+ +

Writing a comment

+ +

view all the commits by all contained by a pull request under the commits tab,

+ +

Commits tab

+ +

or see all the file changes from the pull request across all the commits under the "Files Changed" tab.

+ +

Files Changed

+ +

You can event leave a comment on particular lines in the code change simply by hovering to the left of a line and clicking on the blue note icon.

+ +

Comment in line

+ +

Merging a Pull Request

+ +

Once you and your collaborators are happy with the changes, you start to merge the changes back to master. There are a few ways to do this.

+ +

First, you can use github's "Merge pull request" button at the bottom of your pull request to merge your changes. This is only available when github can detect that there will be no merge conflicts with the base branch. If all goes well, you just have to add a commit message and click on "Confirm Merge" to merge the changes.

+ +

Merge pull request buttonConfirm Merge

+ +

Merging Locally

+ +

If the pull request cannot be merged online due to merge conflicts, or you wish to test things locally before sending the merge to the repo on Github, you can perform the merge locally instead.

+ +

You can find the instruction to do so by clicking the (i) icon on the merge bar.

+ +

Merging Instructions

+ +

However, there's an alternative that's better in my opinion, particularly for long standing branches.

+ +

Squash, Rebase, and Cherry Pick

+ +

In long standing branches, merging can often cause lots problems when updating if changes in a given branch conflict with changes recently merged into the master branch. If there are many commits to the same file, git merge may force you to fix the same merge conflicts over and over again, causing a real headache. While there are many ways to mitigate this issue, such as enabling git rerere to reuse recorded resolution of conflict merges, squashing a series of related changes into 1 commit and cherry-picking it into the master is a great solution, especially for topic branches and isolated features.

+ +

There are several advantages of performing merges this way. First, you only have to deal with merge conflicts once, since all commits are compressed into 1. Second, each commit represents an entire set of changes required for a feature or task, which makes it easy to pin point bugs and other problems when they arise and to remove a change set when it's no longer necessary.

+ +

There are also disadvantages of squashing commits. First, you will lose the details and information for each change, as all changes squashed are compressed together. So the net effect is the same. Second, it can be dangerous and problematic if used incorrectly, such as squashing commits that have been pushed to the remote server and others depend on for their work. Because squashing is changing the git history, you can cause many conflicts that way. However, if you are using this locally or you are the only person working on your branch and you know exactly what you are doing.

+ +

To perform this, use the following command

+ +
git rebase -i HEAD~10
+
+ +

-i stands for interactive mode and HEAD~10 means to examine the 10 latest commits.

+ +

If you see an fatal: Needed a single revision error, this usually means that there are not that many commits left. Try a lower number.

+ +

This will open up an editor with git commit messages that looks something like this:

+ +

Git Rebase

+ +

There are many options available at this stage. These are detailed in this github help page. Here, I'm going to simply squash all changes in this pull request into one. Save and close the editor.

+ +

Squashing commits

+ +

The next screen will pop up asking you to edit your commit messages. You can choose to edit them or simply continue. Save and close the editor.

+ +

Squash Result

+ +

Once your squash completes, you can push it to the remote repo. In this case, these squashed commits have been pushed to the server. However, I'm the only user of this branch and can safely force push the commit to update the git repo.

+ +
git push origin pull-request-demo -f
+
+ +

Closing a Pull Request

+ +

You can simply click on the "Close" button on the pull request to close it. Optionally, you can delete the branch directly using the "Delete this branch" button.

+ +

Closing a Pull Request

+
+ + + + + + +
+
+ + \ No newline at end of file diff --git a/javascripts/main.js b/javascripts/main.js new file mode 100644 index 0000000..d8135d3 --- /dev/null +++ b/javascripts/main.js @@ -0,0 +1 @@ +console.log('This would be the main JS file.'); diff --git a/params.json b/params.json new file mode 100644 index 0000000..fdeb83e --- /dev/null +++ b/params.json @@ -0,0 +1 @@ +{"name":"Pull Request Tutorial","tagline":"A Visual Guide to Pull Requests","body":"# Pull Request Tutorial\r\n\r\n## What is a Pull Request?\r\nFrom Github's [Using Pull Requests Page](https://help.github.com/articles/using-pull-requests)\r\n> Pull requests let you tell others about changes you've pushed to a GitHub repository. Once a pull request is sent, interested parties can review the set of changes, discuss potential modifications, and even push follow-up commits if necessary.\r\n\r\nPull Requests are commonly used by teams and organizations collaborating using the [Shared Repository Model](https://help.github.com/articles/using-pull-requests#article-platform-nav), where everyone shares a single repository and topic branches are used to develop features and isolate changes. Many open source projects on Github use pull requests to manage changes from contributors as they are useful in providing a way to notify project maintainers about changes one has made and in initiating code review and general discussion about a set of changes before being merged into the main branch.\r\n\r\nHere's [an example pull request](https://github.com/jquery/jquery/pull/1051) from jQuery's github repo.\r\n\r\n## Creating a Pull Request\r\n\r\nThere are 2 main work flows when dealing with pull requests:\r\n\r\n1. Pull Request from a [forked repository](https://help.github.com/articles/fork-a-repo)\r\n2. Pull Request from a branch within a repository\r\n\r\nHere we are going to focus on 2.\r\n\r\n### Creating a Topical Branch\r\n\r\nFirst, we will need to create a branch from the latest commit on master. Make sure your repository is up to date first using\r\n\r\n```bash\r\ngit pull origin master\r\n```\r\n\r\n*Note:* `git pull` does a `git fetch` followed by a `git merge` to update the local repo with the remote repo. For a more detailed explanation, see [this stackoverflow post](http://stackoverflow.com/questions/292357/whats-the-difference-between-git-pull-and-git-fetch).\r\n\r\nTo create a branch, use `git checkout -b []`, where `base-branch-name` is optional and defaults to `master`. I'm going to create a new branch called `pull-request-demo` from the `master` branch and push it to github.\r\n\r\n```bash\r\ngit checkout -b pull-request-demo\r\ngit push origin pull-request-demo\r\n```\r\n\r\n### Creating a Pull Request\r\n\r\nTo create a pull request, you must have changes committed to the your new branch.\r\n\r\nGo to the repository page on github. And click on \"Pull Request\" button in the repo header.\r\n\r\n![Pull Request Button](https://f.cloud.github.com/assets/676185/316845/2ea7d418-9848-11e2-90af-5b8f31497a51.png)\r\n\r\nPick the branch you wish to have merged using the \"Head branch\" dropdown. You should leave the rest of the fields as is, unless you are working from a remote branch. In that case, please refer to the [remote branch pull request guide]().\r\n\r\n![Head Branch Dropdown](https://f.cloud.github.com/assets/676185/316857/0d51b008-9849-11e2-909a-36e6f12436b4.png)\r\n\r\nEnter a **title** and **description** for your pull request. Remember you can use [Github Flavored Markdown](https://help.github.com/articles/github-flavored-markdown) in the description and comments\r\n\r\n![Title and Description](https://f.cloud.github.com/assets/676185/316873/0c0e4cc8-984a-11e2-89f5-703c31217e17.png)\r\n\r\nFinally, click on the green \"Send pull request\" button to finish creating the pull request.\r\n\r\n![Send Pull Request](https://f.cloud.github.com/assets/676185/316876/30d6d0ca-984a-11e2-9c5e-420223c35ed9.png)\r\n\r\nYou should now see an open pull request.\r\n\r\n![Open Pull Request](https://f.cloud.github.com/assets/676185/316899/6a62a7c8-984b-11e2-92ee-182ef257b574.png)\r\n\r\n### Using a Pull Request\r\n\r\nYou can write comments related to a pull request,\r\n\r\n![Writing a comment](https://f.cloud.github.com/assets/676185/316903/d9729df8-984b-11e2-9bf6-8fe064957723.png)\r\n\r\nview all the commits by all contained by a pull request under the commits tab,\r\n\r\n![Commits tab](https://f.cloud.github.com/assets/676185/316908/563073ba-984c-11e2-8bd6-450939fbd7b3.png)\r\n\r\nor see all the file changes from the pull request across all the commits under the \"Files Changed\" tab.\r\n\r\n![Files Changed](https://f.cloud.github.com/assets/676185/316911/9e4cbe42-984c-11e2-9636-dd50cb98db44.png)\r\n\r\nYou can event leave a comment on particular lines in the code change simply by hovering to the left of a line and clicking on the blue note icon.\r\n\r\n![Comment in line](https://f.cloud.github.com/assets/676185/316916/015be558-984d-11e2-9c4c-2ddc793fac3c.png)\r\n\r\n### Merging a Pull Request\r\n\r\nOnce you and your collaborators are happy with the changes, you start to merge the changes back to master. There are a few ways to do this.\r\n\r\nFirst, you can use github's \"Merge pull request\" button at the bottom of your pull request to merge your changes. This is only available when github can detect that there will be no merge conflicts with the base branch. If all goes well, you just have to add a commit message and click on \"Confirm Merge\" to merge the changes.\r\n\r\n![Merge pull request button](https://f.cloud.github.com/assets/676185/316946/e8c42c4c-984e-11e2-8a09-5a977652028a.png)\r\n![Confirm Merge](https://f.cloud.github.com/assets/676185/316947/ea15ebee-984e-11e2-8c08-e76a54c89755.png)\r\n\r\n#### Merging Locally\r\n\r\nIf the pull request cannot be merged online due to merge conflicts, or you wish to test things locally before sending the merge to the repo on Github, you can perform the merge locally instead.\r\n\r\nYou can find the instruction to do so by clicking the `(i)` icon on the merge bar.\r\n\r\n![Merging Instructions](https://f.cloud.github.com/assets/676185/316954/b34855f6-984f-11e2-9713-6c8288617a78.png)\r\n\r\nHowever, there's an alternative that's better in my opinion, particularly for long standing branches.\r\n\r\n#### Squash, Rebase, and Cherry Pick\r\n\r\nIn long standing branches, merging can often cause lots problems when updating if changes in a given branch conflict with changes recently merged into the master branch. If there are many commits to the same file, `git merge` may force you to fix the same merge conflicts over and over again, causing a real headache. While there are many ways to mitigate this issue, such as enabling [`git rerere`](https://www.kernel.org/pub/software/scm/git/docs/git-rerere.html) to reuse recorded resolution of conflict merges, squashing a series of related changes into 1 commit and cherry-picking it into the master is a great solution, especially for topic branches and isolated features.\r\n\r\nThere are several advantages of performing merges this way. First, you only have to deal with merge conflicts once, since all commits are compressed into 1. Second, each commit represents an entire set of changes required for a feature or task, which makes it easy to pin point bugs and other problems when they arise and to remove a change set when it's no longer necessary.\r\n\r\nThere are also disadvantages of squashing commits. First, you will lose the details and information for each change, as all changes squashed are compressed together. So the net effect is the same. Second, it can be dangerous and problematic if used incorrectly, such as squashing commits that have been pushed to the remote server **and** others depend on for their work. Because squashing is changing the git history, you can cause many conflicts that way. However, if you are using this locally or you are the only person working on your branch and you know exactly what you are doing.\r\n\r\nTo perform this, use the following command\r\n\r\n```bash\r\ngit rebase -i HEAD~10\r\n```\r\n\r\n`-i` stands for [interactive mode](http://git-scm.com/book/en/Git-Tools-Rewriting-History#Changing-Multiple-Commit-Messages) and `HEAD~10` means to examine the 10 latest commits.\r\n\r\nIf you see an `fatal: Needed a single revision` error, this usually means that there are not that many commits left. Try a lower number.\r\n\r\nThis will open up an editor with git commit messages that looks something like this:\r\n\r\n![Git Rebase](https://f.cloud.github.com/assets/676185/317107/cdcd54d6-9858-11e2-9e78-7642fa363f10.png)\r\n\r\nThere are many options available at this stage. These are detailed in [this github help page](https://help.github.com/articles/interactive-rebase). Here, I'm going to simply squash all changes in this pull request into one. Save and close the editor.\r\n\r\n![Squashing commits](https://f.cloud.github.com/assets/676185/317112/21e1a702-9859-11e2-8c03-7f344002768e.png)\r\n\r\nThe next screen will pop up asking you to edit your commit messages. You can choose to edit them or simply continue. Save and close the editor.\r\n\r\n![Squash Result](https://f.cloud.github.com/assets/676185/317086/cb3933f8-9857-11e2-9909-44cdd256bc11.png)\r\n\r\nOnce your squash completes, you can push it to the remote repo. In this case, these squashed commits have been pushed to the server. However, I'm the only user of this branch and can safely force push the commit to update the git repo.\r\n\r\n```bash\r\ngit push origin pull-request-demo -f\r\n```\r\n\r\n### Closing a Pull Request\r\n\r\nYou can simply click on the \"Close\" button on the pull request to close it. Optionally, you can delete the branch directly using the \"Delete this branch\" button.\r\n\r\n![Closing a Pull Request](https://f.cloud.github.com/assets/676185/317150/3f849c86-985b-11e2-9de9-9c555fc81515.png)\r\n\r\n\r\n","google":"UA-35308500-1","note":"Don't delete this file! It's used internally to help with page regeneration."} \ No newline at end of file diff --git a/stylesheets/print.css b/stylesheets/print.css new file mode 100644 index 0000000..541695b --- /dev/null +++ b/stylesheets/print.css @@ -0,0 +1,226 @@ +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} +body { + line-height: 1; +} +ol, ul { + list-style: none; +} +blockquote, q { + quotes: none; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} +table { + border-collapse: collapse; + border-spacing: 0; +} +body { + font-size: 13px; + line-height: 1.5; + font-family: 'Helvetica Neue', Helvetica, Arial, serif; + color: #000; +} + +a { + color: #d5000d; + font-weight: bold; +} + +header { + padding-top: 35px; + padding-bottom: 10px; +} + +header h1 { + font-weight: bold; + letter-spacing: -1px; + font-size: 48px; + color: #303030; + line-height: 1.2; +} + +header h2 { + letter-spacing: -1px; + font-size: 24px; + color: #aaa; + font-weight: normal; + line-height: 1.3; +} +#downloads { + display: none; +} +#main_content { + padding-top: 20px; +} + +code, pre { + font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal; + color: #222; + margin-bottom: 30px; + font-size: 12px; +} + +code { + padding: 0 3px; +} + +pre { + border: solid 1px #ddd; + padding: 20px; + overflow: auto; +} +pre code { + padding: 0; +} + +ul, ol, dl { + margin-bottom: 20px; +} + + +/* COMMON STYLES */ + +table { + width: 100%; + border: 1px solid #ebebeb; +} + +th { + font-weight: 500; +} + +td { + border: 1px solid #ebebeb; + text-align: center; + font-weight: 300; +} + +form { + background: #f2f2f2; + padding: 20px; + +} + + +/* GENERAL ELEMENT TYPE STYLES */ + +h1 { + font-size: 2.8em; +} + +h2 { + font-size: 22px; + font-weight: bold; + color: #303030; + margin-bottom: 8px; +} + +h3 { + color: #d5000d; + font-size: 18px; + font-weight: bold; + margin-bottom: 8px; +} + +h4 { + font-size: 16px; + color: #303030; + font-weight: bold; +} + +h5 { + font-size: 1em; + color: #303030; +} + +h6 { + font-size: .8em; + color: #303030; +} + +p { + font-weight: 300; + margin-bottom: 20px; +} + +a { + text-decoration: none; +} + +p a { + font-weight: 400; +} + +blockquote { + font-size: 1.6em; + border-left: 10px solid #e9e9e9; + margin-bottom: 20px; + padding: 0 0 0 30px; +} + +ul li { + list-style: disc inside; + padding-left: 20px; +} + +ol li { + list-style: decimal inside; + padding-left: 3px; +} + +dl dd { + font-style: italic; + font-weight: 100; +} + +footer { + margin-top: 40px; + padding-top: 20px; + padding-bottom: 30px; + font-size: 13px; + color: #aaa; +} + +footer a { + color: #666; +} + +/* MISC */ +.clearfix:after { + clear: both; + content: '.'; + display: block; + visibility: hidden; + height: 0; +} + +.clearfix {display: inline-block;} +* html .clearfix {height: 1%;} +.clearfix {display: block;} \ No newline at end of file diff --git a/stylesheets/pygment_trac.css b/stylesheets/pygment_trac.css new file mode 100644 index 0000000..c6a6452 --- /dev/null +++ b/stylesheets/pygment_trac.css @@ -0,0 +1,69 @@ +.highlight { background: #ffffff; } +.highlight .c { color: #999988; font-style: italic } /* Comment */ +.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ +.highlight .k { font-weight: bold } /* Keyword */ +.highlight .o { font-weight: bold } /* Operator */ +.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */ +.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ +.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #aa0000 } /* Generic.Error */ +.highlight .gh { color: #999999 } /* Generic.Heading */ +.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ +.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */ +.highlight .go { color: #888888 } /* Generic.Output */ +.highlight .gp { color: #555555 } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold; } /* Generic.Subheading */ +.highlight .gt { color: #aa0000 } /* Generic.Traceback */ +.highlight .kc { font-weight: bold } /* Keyword.Constant */ +.highlight .kd { font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */ +.highlight .m { color: #009999 } /* Literal.Number */ +.highlight .s { color: #d14 } /* Literal.String */ +.highlight .na { color: #008080 } /* Name.Attribute */ +.highlight .nb { color: #0086B3 } /* Name.Builtin */ +.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */ +.highlight .no { color: #008080 } /* Name.Constant */ +.highlight .ni { color: #800080 } /* Name.Entity */ +.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */ +.highlight .nn { color: #555555 } /* Name.Namespace */ +.highlight .nt { color: #000080 } /* Name.Tag */ +.highlight .nv { color: #008080 } /* Name.Variable */ +.highlight .ow { font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mf { color: #009999 } /* Literal.Number.Float */ +.highlight .mh { color: #009999 } /* Literal.Number.Hex */ +.highlight .mi { color: #009999 } /* Literal.Number.Integer */ +.highlight .mo { color: #009999 } /* Literal.Number.Oct */ +.highlight .sb { color: #d14 } /* Literal.String.Backtick */ +.highlight .sc { color: #d14 } /* Literal.String.Char */ +.highlight .sd { color: #d14 } /* Literal.String.Doc */ +.highlight .s2 { color: #d14 } /* Literal.String.Double */ +.highlight .se { color: #d14 } /* Literal.String.Escape */ +.highlight .sh { color: #d14 } /* Literal.String.Heredoc */ +.highlight .si { color: #d14 } /* Literal.String.Interpol */ +.highlight .sx { color: #d14 } /* Literal.String.Other */ +.highlight .sr { color: #009926 } /* Literal.String.Regex */ +.highlight .s1 { color: #d14 } /* Literal.String.Single */ +.highlight .ss { color: #990073 } /* Literal.String.Symbol */ +.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */ +.highlight .vc { color: #008080 } /* Name.Variable.Class */ +.highlight .vg { color: #008080 } /* Name.Variable.Global */ +.highlight .vi { color: #008080 } /* Name.Variable.Instance */ +.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */ + +.type-csharp .highlight .k { color: #0000FF } +.type-csharp .highlight .kt { color: #0000FF } +.type-csharp .highlight .nf { color: #000000; font-weight: normal } +.type-csharp .highlight .nc { color: #2B91AF } +.type-csharp .highlight .nn { color: #000000 } +.type-csharp .highlight .s { color: #A31515 } +.type-csharp .highlight .sc { color: #A31515 } diff --git a/stylesheets/stylesheet.css b/stylesheets/stylesheet.css new file mode 100644 index 0000000..020ad6d --- /dev/null +++ b/stylesheets/stylesheet.css @@ -0,0 +1,371 @@ +/* http://meyerweb.com/eric/tools/css/reset/ + v2.0 | 20110126 + License: none (public domain) +*/ +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} +body { + line-height: 1; +} +ol, ul { + list-style: none; +} +blockquote, q { + quotes: none; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} +table { + border-collapse: collapse; + border-spacing: 0; +} + +/* LAYOUT STYLES */ +body { + font-size: 1em; + line-height: 1.5; + background: #e7e7e7 url(../images/body-bg.png) 0 0 repeat; + font-family: 'Helvetica Neue', Helvetica, Arial, serif; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); + color: #6d6d6d; +} + +a { + color: #d5000d; +} +a:hover { + color: #c5000c; +} + +header { + padding-top: 35px; + padding-bottom: 25px; +} + +header h1 { + font-family: 'Chivo', 'Helvetica Neue', Helvetica, Arial, serif; font-weight: 900; + letter-spacing: -1px; + font-size: 48px; + color: #303030; + line-height: 1.2; +} + +header h2 { + letter-spacing: -1px; + font-size: 24px; + color: #aaa; + font-weight: normal; + line-height: 1.3; +} + +#container { + background: transparent url(../images/highlight-bg.jpg) 50% 0 no-repeat; + min-height: 595px; +} + +.inner { + width: 620px; + margin: 0 auto; +} + +#container .inner img { + max-width: 100%; +} + +#downloads { + margin-bottom: 40px; +} + +a.button { + -moz-border-radius: 30px; + -webkit-border-radius: 30px; + border-radius: 30px; + border-top: solid 1px #cbcbcb; + border-left: solid 1px #b7b7b7; + border-right: solid 1px #b7b7b7; + border-bottom: solid 1px #b3b3b3; + color: #303030; + line-height: 25px; + font-weight: bold; + font-size: 15px; + padding: 12px 8px 12px 8px; + display: block; + float: left; + width: 179px; + margin-right: 14px; + background: #fdfdfd; /* Old browsers */ + background: -moz-linear-gradient(top, #fdfdfd 0%, #f2f2f2 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#fdfdfd), color-stop(100%,#f2f2f2)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #fdfdfd 0%,#f2f2f2 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #fdfdfd 0%,#f2f2f2 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #fdfdfd 0%,#f2f2f2 100%); /* IE10+ */ + background: linear-gradient(top, #fdfdfd 0%,#f2f2f2 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fdfdfd', endColorstr='#f2f2f2',GradientType=0 ); /* IE6-9 */ + -webkit-box-shadow: 10px 10px 5px #888; + -moz-box-shadow: 10px 10px 5px #888; + box-shadow: 0px 1px 5px #e8e8e8; +} +a.button:hover { + border-top: solid 1px #b7b7b7; + border-left: solid 1px #b3b3b3; + border-right: solid 1px #b3b3b3; + border-bottom: solid 1px #b3b3b3; + background: #fafafa; /* Old browsers */ + background: -moz-linear-gradient(top, #fdfdfd 0%, #f6f6f6 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#fdfdfd), color-stop(100%,#f6f6f6)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #fdfdfd 0%,#f6f6f6 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #fdfdfd 0%,#f6f6f6 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #fdfdfd 0%,#f6f6f6 100%); /* IE10+ */ + background: linear-gradient(top, #fdfdfd 0%,#f6f6f6, 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fdfdfd', endColorstr='#f6f6f6',GradientType=0 ); /* IE6-9 */ +} + +a.button span { + padding-left: 50px; + display: block; + height: 23px; +} + +#download-zip span { + background: transparent url(../images/zip-icon.png) 12px 50% no-repeat; +} +#download-tar-gz span { + background: transparent url(../images/tar-gz-icon.png) 12px 50% no-repeat; +} +#view-on-github span { + background: transparent url(../images/octocat-icon.png) 12px 50% no-repeat; +} +#view-on-github { + margin-right: 0; +} + +code, pre { + font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal; + color: #222; + margin-bottom: 30px; + font-size: 14px; +} + +code { + background-color: #f2f2f2; + border: solid 1px #ddd; + padding: 0 3px; +} + +pre { + padding: 20px; + background: #303030; + color: #f2f2f2; + text-shadow: none; + overflow: auto; +} +pre code { + color: #f2f2f2; + background-color: #303030; + border: none; + padding: 0; +} + +ul, ol, dl { + margin-bottom: 20px; +} + + +/* COMMON STYLES */ + +hr { + height: 1px; + line-height: 1px; + margin-top: 1em; + padding-bottom: 1em; + border: none; + background: transparent url('../images/hr.png') 50% 0 no-repeat; +} + +strong { + font-weight: bold; +} + +em { + font-style: italic; +} + +table { + width: 100%; + border: 1px solid #ebebeb; +} + +th { + font-weight: 500; +} + +td { + border: 1px solid #ebebeb; + text-align: center; + font-weight: 300; +} + +form { + background: #f2f2f2; + padding: 20px; + +} + + +/* GENERAL ELEMENT TYPE STYLES */ + +h1 { + font-size: 32px; +} + +h2 { + font-size: 22px; + font-weight: bold; + color: #303030; + margin-bottom: 8px; +} + +h3 { + color: #d5000d; + font-size: 18px; + font-weight: bold; + margin-bottom: 8px; +} + +h4 { + font-size: 16px; + color: #303030; + font-weight: bold; +} + +h5 { + font-size: 1em; + color: #303030; +} + +h6 { + font-size: .8em; + color: #303030; +} + +p { + font-weight: 300; + margin-bottom: 20px; +} + +a { + text-decoration: none; +} + +p a { + font-weight: 400; +} + +blockquote { + font-size: 1.6em; + border-left: 10px solid #e9e9e9; + margin-bottom: 20px; + padding: 0 0 0 30px; +} + +ul li { + list-style: disc inside; + padding-left: 20px; +} + +ol li { + list-style: decimal inside; + padding-left: 3px; +} + +dl dt { + color: #303030; +} + +footer { + background: transparent url('../images/hr.png') 0 0 no-repeat; + margin-top: 40px; + padding-top: 20px; + padding-bottom: 30px; + font-size: 13px; + color: #aaa; +} + +footer a { + color: #666; +} +footer a:hover { + color: #444; +} + +/* MISC */ +.clearfix:after { + clear: both; + content: '.'; + display: block; + visibility: hidden; + height: 0; +} + +.clearfix {display: inline-block;} +* html .clearfix {height: 1%;} +.clearfix {display: block;} + +/* #Media Queries +================================================== */ + +/* Smaller than standard 960 (devices and browsers) */ +@media only screen and (max-width: 959px) {} + +/* Tablet Portrait size to standard 960 (devices and browsers) */ +@media only screen and (min-width: 768px) and (max-width: 959px) {} + +/* All Mobile Sizes (devices and browser) */ +@media only screen and (max-width: 767px) { + header { + padding-top: 10px; + padding-bottom: 10px; + } + #downloads { + margin-bottom: 25px; + } + #download-zip, #download-tar-gz { + display: none; + } + .inner { + width: 94%; + margin: 0 auto; + } +} + +/* Mobile Landscape Size to Tablet Portrait (devices and browsers) */ +@media only screen and (min-width: 480px) and (max-width: 767px) {} + +/* Mobile Portrait Size to Mobile Landscape Size (devices and browsers) */ +@media only screen and (max-width: 479px) {} From 11bc052b0fb4a1039865b6bd9e4e5aadf7fac1b1 Mon Sep 17 00:00:00 2001 From: Yang Su Date: Fri, 29 Mar 2013 18:37:46 -0700 Subject: [PATCH 2/2] Create gh-pages branch via GitHub --- index.html | 10 ++++++++-- params.json | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/index.html b/index.html index 03407c4..3c1ef0b 100644 --- a/index.html +++ b/index.html @@ -78,7 +78,7 @@

Creating a Pull Request

Pull Request Button

-

Pick the branch you wish to have merged using the "Head branch" dropdown. You should leave the rest of the fields as is, unless you are working from a remote branch. In that case, please refer to the remote branch pull request guide.

+

Pick the branch you wish to have merged using the "Head branch" dropdown. You should leave the rest of the fields as is, unless you are working from a remote branch. In that case, just make sure that the base repo and base branch are set correctly.

Head Branch Dropdown

@@ -128,7 +128,7 @@

Merging Locally

Merging Instructions

-

However, there's an alternative that's better in my opinion, particularly for long standing branches.

+

However, there's an alternative that may be better for long standing branches.

Squash, Rebase, and Cherry Pick

@@ -164,6 +164,12 @@

Squash, Rebase, and Cherry Pick

git push origin pull-request-demo -f
 
+

To merge the commit, we will use git cherry-pick.

+ +

Cherry Picking

+ +

You are done! Github should detect the changes and update the pull request. You can then marked the pull request as merged and optionally delete the branch.

+

Closing a Pull Request

You can simply click on the "Close" button on the pull request to close it. Optionally, you can delete the branch directly using the "Delete this branch" button.

diff --git a/params.json b/params.json index fdeb83e..a3470be 100644 --- a/params.json +++ b/params.json @@ -1 +1 @@ -{"name":"Pull Request Tutorial","tagline":"A Visual Guide to Pull Requests","body":"# Pull Request Tutorial\r\n\r\n## What is a Pull Request?\r\nFrom Github's [Using Pull Requests Page](https://help.github.com/articles/using-pull-requests)\r\n> Pull requests let you tell others about changes you've pushed to a GitHub repository. Once a pull request is sent, interested parties can review the set of changes, discuss potential modifications, and even push follow-up commits if necessary.\r\n\r\nPull Requests are commonly used by teams and organizations collaborating using the [Shared Repository Model](https://help.github.com/articles/using-pull-requests#article-platform-nav), where everyone shares a single repository and topic branches are used to develop features and isolate changes. Many open source projects on Github use pull requests to manage changes from contributors as they are useful in providing a way to notify project maintainers about changes one has made and in initiating code review and general discussion about a set of changes before being merged into the main branch.\r\n\r\nHere's [an example pull request](https://github.com/jquery/jquery/pull/1051) from jQuery's github repo.\r\n\r\n## Creating a Pull Request\r\n\r\nThere are 2 main work flows when dealing with pull requests:\r\n\r\n1. Pull Request from a [forked repository](https://help.github.com/articles/fork-a-repo)\r\n2. Pull Request from a branch within a repository\r\n\r\nHere we are going to focus on 2.\r\n\r\n### Creating a Topical Branch\r\n\r\nFirst, we will need to create a branch from the latest commit on master. Make sure your repository is up to date first using\r\n\r\n```bash\r\ngit pull origin master\r\n```\r\n\r\n*Note:* `git pull` does a `git fetch` followed by a `git merge` to update the local repo with the remote repo. For a more detailed explanation, see [this stackoverflow post](http://stackoverflow.com/questions/292357/whats-the-difference-between-git-pull-and-git-fetch).\r\n\r\nTo create a branch, use `git checkout -b []`, where `base-branch-name` is optional and defaults to `master`. I'm going to create a new branch called `pull-request-demo` from the `master` branch and push it to github.\r\n\r\n```bash\r\ngit checkout -b pull-request-demo\r\ngit push origin pull-request-demo\r\n```\r\n\r\n### Creating a Pull Request\r\n\r\nTo create a pull request, you must have changes committed to the your new branch.\r\n\r\nGo to the repository page on github. And click on \"Pull Request\" button in the repo header.\r\n\r\n![Pull Request Button](https://f.cloud.github.com/assets/676185/316845/2ea7d418-9848-11e2-90af-5b8f31497a51.png)\r\n\r\nPick the branch you wish to have merged using the \"Head branch\" dropdown. You should leave the rest of the fields as is, unless you are working from a remote branch. In that case, please refer to the [remote branch pull request guide]().\r\n\r\n![Head Branch Dropdown](https://f.cloud.github.com/assets/676185/316857/0d51b008-9849-11e2-909a-36e6f12436b4.png)\r\n\r\nEnter a **title** and **description** for your pull request. Remember you can use [Github Flavored Markdown](https://help.github.com/articles/github-flavored-markdown) in the description and comments\r\n\r\n![Title and Description](https://f.cloud.github.com/assets/676185/316873/0c0e4cc8-984a-11e2-89f5-703c31217e17.png)\r\n\r\nFinally, click on the green \"Send pull request\" button to finish creating the pull request.\r\n\r\n![Send Pull Request](https://f.cloud.github.com/assets/676185/316876/30d6d0ca-984a-11e2-9c5e-420223c35ed9.png)\r\n\r\nYou should now see an open pull request.\r\n\r\n![Open Pull Request](https://f.cloud.github.com/assets/676185/316899/6a62a7c8-984b-11e2-92ee-182ef257b574.png)\r\n\r\n### Using a Pull Request\r\n\r\nYou can write comments related to a pull request,\r\n\r\n![Writing a comment](https://f.cloud.github.com/assets/676185/316903/d9729df8-984b-11e2-9bf6-8fe064957723.png)\r\n\r\nview all the commits by all contained by a pull request under the commits tab,\r\n\r\n![Commits tab](https://f.cloud.github.com/assets/676185/316908/563073ba-984c-11e2-8bd6-450939fbd7b3.png)\r\n\r\nor see all the file changes from the pull request across all the commits under the \"Files Changed\" tab.\r\n\r\n![Files Changed](https://f.cloud.github.com/assets/676185/316911/9e4cbe42-984c-11e2-9636-dd50cb98db44.png)\r\n\r\nYou can event leave a comment on particular lines in the code change simply by hovering to the left of a line and clicking on the blue note icon.\r\n\r\n![Comment in line](https://f.cloud.github.com/assets/676185/316916/015be558-984d-11e2-9c4c-2ddc793fac3c.png)\r\n\r\n### Merging a Pull Request\r\n\r\nOnce you and your collaborators are happy with the changes, you start to merge the changes back to master. There are a few ways to do this.\r\n\r\nFirst, you can use github's \"Merge pull request\" button at the bottom of your pull request to merge your changes. This is only available when github can detect that there will be no merge conflicts with the base branch. If all goes well, you just have to add a commit message and click on \"Confirm Merge\" to merge the changes.\r\n\r\n![Merge pull request button](https://f.cloud.github.com/assets/676185/316946/e8c42c4c-984e-11e2-8a09-5a977652028a.png)\r\n![Confirm Merge](https://f.cloud.github.com/assets/676185/316947/ea15ebee-984e-11e2-8c08-e76a54c89755.png)\r\n\r\n#### Merging Locally\r\n\r\nIf the pull request cannot be merged online due to merge conflicts, or you wish to test things locally before sending the merge to the repo on Github, you can perform the merge locally instead.\r\n\r\nYou can find the instruction to do so by clicking the `(i)` icon on the merge bar.\r\n\r\n![Merging Instructions](https://f.cloud.github.com/assets/676185/316954/b34855f6-984f-11e2-9713-6c8288617a78.png)\r\n\r\nHowever, there's an alternative that's better in my opinion, particularly for long standing branches.\r\n\r\n#### Squash, Rebase, and Cherry Pick\r\n\r\nIn long standing branches, merging can often cause lots problems when updating if changes in a given branch conflict with changes recently merged into the master branch. If there are many commits to the same file, `git merge` may force you to fix the same merge conflicts over and over again, causing a real headache. While there are many ways to mitigate this issue, such as enabling [`git rerere`](https://www.kernel.org/pub/software/scm/git/docs/git-rerere.html) to reuse recorded resolution of conflict merges, squashing a series of related changes into 1 commit and cherry-picking it into the master is a great solution, especially for topic branches and isolated features.\r\n\r\nThere are several advantages of performing merges this way. First, you only have to deal with merge conflicts once, since all commits are compressed into 1. Second, each commit represents an entire set of changes required for a feature or task, which makes it easy to pin point bugs and other problems when they arise and to remove a change set when it's no longer necessary.\r\n\r\nThere are also disadvantages of squashing commits. First, you will lose the details and information for each change, as all changes squashed are compressed together. So the net effect is the same. Second, it can be dangerous and problematic if used incorrectly, such as squashing commits that have been pushed to the remote server **and** others depend on for their work. Because squashing is changing the git history, you can cause many conflicts that way. However, if you are using this locally or you are the only person working on your branch and you know exactly what you are doing.\r\n\r\nTo perform this, use the following command\r\n\r\n```bash\r\ngit rebase -i HEAD~10\r\n```\r\n\r\n`-i` stands for [interactive mode](http://git-scm.com/book/en/Git-Tools-Rewriting-History#Changing-Multiple-Commit-Messages) and `HEAD~10` means to examine the 10 latest commits.\r\n\r\nIf you see an `fatal: Needed a single revision` error, this usually means that there are not that many commits left. Try a lower number.\r\n\r\nThis will open up an editor with git commit messages that looks something like this:\r\n\r\n![Git Rebase](https://f.cloud.github.com/assets/676185/317107/cdcd54d6-9858-11e2-9e78-7642fa363f10.png)\r\n\r\nThere are many options available at this stage. These are detailed in [this github help page](https://help.github.com/articles/interactive-rebase). Here, I'm going to simply squash all changes in this pull request into one. Save and close the editor.\r\n\r\n![Squashing commits](https://f.cloud.github.com/assets/676185/317112/21e1a702-9859-11e2-8c03-7f344002768e.png)\r\n\r\nThe next screen will pop up asking you to edit your commit messages. You can choose to edit them or simply continue. Save and close the editor.\r\n\r\n![Squash Result](https://f.cloud.github.com/assets/676185/317086/cb3933f8-9857-11e2-9909-44cdd256bc11.png)\r\n\r\nOnce your squash completes, you can push it to the remote repo. In this case, these squashed commits have been pushed to the server. However, I'm the only user of this branch and can safely force push the commit to update the git repo.\r\n\r\n```bash\r\ngit push origin pull-request-demo -f\r\n```\r\n\r\n### Closing a Pull Request\r\n\r\nYou can simply click on the \"Close\" button on the pull request to close it. Optionally, you can delete the branch directly using the \"Delete this branch\" button.\r\n\r\n![Closing a Pull Request](https://f.cloud.github.com/assets/676185/317150/3f849c86-985b-11e2-9de9-9c555fc81515.png)\r\n\r\n\r\n","google":"UA-35308500-1","note":"Don't delete this file! It's used internally to help with page regeneration."} \ No newline at end of file +{"name":"Pull Request Tutorial","tagline":"A Visual Guide to Pull Requests","body":"# Pull Request Tutorial\r\n\r\n## What is a Pull Request?\r\nFrom Github's [Using Pull Requests Page](https://help.github.com/articles/using-pull-requests)\r\n> Pull requests let you tell others about changes you've pushed to a GitHub repository. Once a pull request is sent, interested parties can review the set of changes, discuss potential modifications, and even push follow-up commits if necessary.\r\n\r\nPull Requests are commonly used by teams and organizations collaborating using the [Shared Repository Model](https://help.github.com/articles/using-pull-requests#article-platform-nav), where everyone shares a single repository and topic branches are used to develop features and isolate changes. Many open source projects on Github use pull requests to manage changes from contributors as they are useful in providing a way to notify project maintainers about changes one has made and in initiating code review and general discussion about a set of changes before being merged into the main branch.\r\n\r\nHere's [an example pull request](https://github.com/jquery/jquery/pull/1051) from jQuery's github repo.\r\n\r\n## Creating a Pull Request\r\n\r\nThere are 2 main work flows when dealing with pull requests:\r\n\r\n1. Pull Request from a [forked repository](https://help.github.com/articles/fork-a-repo)\r\n2. Pull Request from a branch within a repository\r\n\r\nHere we are going to focus on 2.\r\n\r\n### Creating a Topical Branch\r\n\r\nFirst, we will need to create a branch from the latest commit on master. Make sure your repository is up to date first using\r\n\r\n```bash\r\ngit pull origin master\r\n```\r\n\r\n*Note:* `git pull` does a `git fetch` followed by a `git merge` to update the local repo with the remote repo. For a more detailed explanation, see [this stackoverflow post](http://stackoverflow.com/questions/292357/whats-the-difference-between-git-pull-and-git-fetch).\r\n\r\nTo create a branch, use `git checkout -b []`, where `base-branch-name` is optional and defaults to `master`. I'm going to create a new branch called `pull-request-demo` from the `master` branch and push it to github.\r\n\r\n```bash\r\ngit checkout -b pull-request-demo\r\ngit push origin pull-request-demo\r\n```\r\n\r\n### Creating a Pull Request\r\n\r\nTo create a pull request, you must have changes committed to the your new branch.\r\n\r\nGo to the repository page on github. And click on \"Pull Request\" button in the repo header.\r\n\r\n![Pull Request Button](https://f.cloud.github.com/assets/676185/316845/2ea7d418-9848-11e2-90af-5b8f31497a51.png)\r\n\r\nPick the branch you wish to have merged using the \"Head branch\" dropdown. You should leave the rest of the fields as is, unless you are working from a remote branch. In that case, just make sure that the base repo and base branch are set correctly.\r\n\r\n![Head Branch Dropdown](https://f.cloud.github.com/assets/676185/316857/0d51b008-9849-11e2-909a-36e6f12436b4.png)\r\n\r\nEnter a **title** and **description** for your pull request. Remember you can use [Github Flavored Markdown](https://help.github.com/articles/github-flavored-markdown) in the description and comments\r\n\r\n![Title and Description](https://f.cloud.github.com/assets/676185/316873/0c0e4cc8-984a-11e2-89f5-703c31217e17.png)\r\n\r\nFinally, click on the green \"Send pull request\" button to finish creating the pull request.\r\n\r\n![Send Pull Request](https://f.cloud.github.com/assets/676185/316876/30d6d0ca-984a-11e2-9c5e-420223c35ed9.png)\r\n\r\nYou should now see an open pull request.\r\n\r\n![Open Pull Request](https://f.cloud.github.com/assets/676185/316899/6a62a7c8-984b-11e2-92ee-182ef257b574.png)\r\n\r\n### Using a Pull Request\r\n\r\nYou can write comments related to a pull request,\r\n\r\n![Writing a comment](https://f.cloud.github.com/assets/676185/316903/d9729df8-984b-11e2-9bf6-8fe064957723.png)\r\n\r\nview all the commits by all contained by a pull request under the commits tab,\r\n\r\n![Commits tab](https://f.cloud.github.com/assets/676185/316908/563073ba-984c-11e2-8bd6-450939fbd7b3.png)\r\n\r\nor see all the file changes from the pull request across all the commits under the \"Files Changed\" tab.\r\n\r\n![Files Changed](https://f.cloud.github.com/assets/676185/316911/9e4cbe42-984c-11e2-9636-dd50cb98db44.png)\r\n\r\nYou can event leave a comment on particular lines in the code change simply by hovering to the left of a line and clicking on the blue note icon.\r\n\r\n![Comment in line](https://f.cloud.github.com/assets/676185/316916/015be558-984d-11e2-9c4c-2ddc793fac3c.png)\r\n\r\n### Merging a Pull Request\r\n\r\nOnce you and your collaborators are happy with the changes, you start to merge the changes back to master. There are a few ways to do this.\r\n\r\nFirst, you can use github's \"Merge pull request\" button at the bottom of your pull request to merge your changes. This is only available when github can detect that there will be no merge conflicts with the base branch. If all goes well, you just have to add a commit message and click on \"Confirm Merge\" to merge the changes.\r\n\r\n![Merge pull request button](https://f.cloud.github.com/assets/676185/316946/e8c42c4c-984e-11e2-8a09-5a977652028a.png)\r\n![Confirm Merge](https://f.cloud.github.com/assets/676185/316947/ea15ebee-984e-11e2-8c08-e76a54c89755.png)\r\n\r\n#### Merging Locally\r\n\r\nIf the pull request cannot be merged online due to merge conflicts, or you wish to test things locally before sending the merge to the repo on Github, you can perform the merge locally instead.\r\n\r\nYou can find the instruction to do so by clicking the `(i)` icon on the merge bar.\r\n\r\n![Merging Instructions](https://f.cloud.github.com/assets/676185/316954/b34855f6-984f-11e2-9713-6c8288617a78.png)\r\n\r\nHowever, there's an alternative that may be better for long standing branches.\r\n\r\n#### Squash, Rebase, and Cherry Pick\r\n\r\nIn long standing branches, merging can often cause lots problems when updating if changes in a given branch conflict with changes recently merged into the master branch. If there are many commits to the same file, `git merge` may force you to fix the same merge conflicts over and over again, causing a real headache. While there are many ways to mitigate this issue, such as enabling [`git rerere`](https://www.kernel.org/pub/software/scm/git/docs/git-rerere.html) to reuse recorded resolution of conflict merges, squashing a series of related changes into 1 commit and cherry-picking it into the master is a great solution, especially for topic branches and isolated features.\r\n\r\nThere are several advantages of performing merges this way. First, you only have to deal with merge conflicts once, since all commits are compressed into 1. Second, each commit represents an entire set of changes required for a feature or task, which makes it easy to pin point bugs and other problems when they arise and to remove a change set when it's no longer necessary.\r\n\r\nThere are also disadvantages of squashing commits. First, you will lose the details and information for each change, as all changes squashed are compressed together. So the net effect is the same. Second, it can be dangerous and problematic if used incorrectly, such as squashing commits that have been pushed to the remote server **and** others depend on for their work. Because squashing is changing the git history, you can cause many conflicts that way. However, if you are using this locally or you are the only person working on your branch and you know exactly what you are doing.\r\n\r\nTo perform this, use the following command\r\n\r\n```bash\r\ngit rebase -i HEAD~10\r\n```\r\n\r\n`-i` stands for [interactive mode](http://git-scm.com/book/en/Git-Tools-Rewriting-History#Changing-Multiple-Commit-Messages) and `HEAD~10` means to examine the 10 latest commits.\r\n\r\nIf you see an `fatal: Needed a single revision` error, this usually means that there are not that many commits left. Try a lower number.\r\n\r\nThis will open up an editor with git commit messages that looks something like this:\r\n\r\n![Git Rebase](https://f.cloud.github.com/assets/676185/317107/cdcd54d6-9858-11e2-9e78-7642fa363f10.png)\r\n\r\nThere are many options available at this stage. These are detailed in [this github help page](https://help.github.com/articles/interactive-rebase). Here, I'm going to simply squash all changes in this pull request into one. Save and close the editor.\r\n\r\n![Squashing commits](https://f.cloud.github.com/assets/676185/317112/21e1a702-9859-11e2-8c03-7f344002768e.png)\r\n\r\nThe next screen will pop up asking you to edit your commit messages. You can choose to edit them or simply continue. Save and close the editor.\r\n\r\n![Squash Result](https://f.cloud.github.com/assets/676185/317086/cb3933f8-9857-11e2-9909-44cdd256bc11.png)\r\n\r\nOnce your squash completes, you can push it to the remote repo. In this case, these squashed commits have been pushed to the server. However, I'm the only user of this branch and can safely force push the commit to update the git repo.\r\n\r\n```bash\r\ngit push origin pull-request-demo -f\r\n```\r\n\r\nTo merge the commit, we will use [`git cherry-pick`](https://www.kernel.org/pub/software/scm/git/docs/git-cherry-pick.html).\r\n\r\n![Cherry Picking](https://f.cloud.github.com/assets/676185/319726/fdc11cfa-98d9-11e2-8891-248d9ed09c05.png)\r\n\r\nYou are done! Github should detect the changes and update the pull request. You can then marked the pull request as merged and optionally delete the branch.\r\n\r\n### Closing a Pull Request\r\n\r\nYou can simply click on the \"Close\" button on the pull request to close it. Optionally, you can delete the branch directly using the \"Delete this branch\" button.\r\n\r\n![Closing a Pull Request](https://f.cloud.github.com/assets/676185/317150/3f849c86-985b-11e2-9de9-9c555fc81515.png)\r\n\r\n\r\n","google":"UA-35308500-1","note":"Don't delete this file! It's used internally to help with page regeneration."} \ No newline at end of file