{"id":233,"date":"2014-06-20T08:00:00","date_gmt":"2014-06-20T08:00:00","guid":{"rendered":"http:\/\/localhost\/?p=233"},"modified":"2015-12-16T19:52:37","modified_gmt":"2015-12-16T19:52:37","slug":"pull-requests","status":"publish","type":"post","link":"https:\/\/ionic.io\/blog\/pull-requests","title":{"rendered":"The Art of a Successful Pull Request"},"content":{"rendered":"<p>When we started Ionic we didn&#8217;t have much experience managing popular open source projects. So when the project started taking off, gaining 6600 stars and 90 contributors submitting hundreds of pull requests from countries all over the world in just 6 short months, we had to learn quickly how to successfully manage a growing open source project.<\/p>\n<p><!--\nOne huge innovation in open source in the last several years has been the Pull Request. The idea behind a Pull Request is that an open source project can accept changes and improvements from anyone all over the world, without managing the complexities of contributor access and forming monolithic development teams.\n\nTo create a pull request on GitHub, for example, a developer just has to \"fork\" the code, make their changes, and submit the Pull Request back to the official repository, essentially requesting that we \"pull\" in their changes into the official repo.\n--><\/p>\n<p>One crucial aspect of open source software development is the Pull Request. Pull requests make it possible to accept changes and improvements from the community without dealing with the complicated nature of committer privileges or growing a monolithic development team.<\/p>\n<p>The problem with pull requests is that their creation is unmanaged. Meaning PRs often end up with code styles and implementation details that don&#8217;t fit with the standards or goals of the main project. Since every open source project relies on its community to improve the project through code contributions, enabling and encouraging pull requests is crucial.<\/p>\n<p><!--more--><\/p>\n<p>Here are some steps to successfully creating pull requests that get merged in your favorite open source project:<\/p>\n<h3 id=\"onecommitonechange\">One commit, one change<\/h3>\n<p>A good pull request is easy to reason about. It has just one commit, and changes <em>as few things<\/em> as possible.<\/p>\n<p>If a pull request addresses multiple issues or is treated as a &#8220;work in progress&#8221; PR, then it will be difficult to verify the PR is self-contained and does not cause unintended issues.<\/p>\n<p>Example of a good one: <a href=\"https:\/\/github.com\/driftyco\/ionic\/pull\/1478\">https:\/\/github.com\/driftyco\/ionic\/pull\/1478<\/a><\/p>\n<p>Example of a not so good one:  <a href=\"https:\/\/github.com\/driftyco\/ionic\/pull\/654\">https:\/\/github.com\/driftyco\/ionic\/pull\/654<\/a><\/p>\n<h3 id=\"scratcheveryonesitch\">Scratch everyone&#8217;s itch<\/h3>\n<p>Don&#8217;t submit PRs that are so limited in scope that they wouldn&#8217;t be useful to the entire community. Examples are extremely custom UI elements (using Ionic as an example), to functionality or API changes to better fit your application.<\/p>\n<h3 id=\"labelwipprsassuch\">Label WIP PRs as such<\/h3>\n<p>Work-in-progress PRs are really useful. Done well, they provoke discussion, make it easy to track progress, and invite review from the community.<\/p>\n<p>However, WIP PRs are more appropriate for mandated work that has already been agreed upon by the project owners. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>When we started Ionic we didn&#8217;t have much experience managing popular open source projects. So when the project started taking off, gaining 6600 stars and 90 contributors submitting hundreds of pull requests from countries all over the world in just 6 short months, we had to learn quickly how to successfully manage a growing open [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"publish_to_discourse":"","publish_post_category":"","wpdc_auto_publish_overridden":"","wpdc_topic_tags":"","wpdc_pin_topic":"","wpdc_pin_until":"","discourse_post_id":"","discourse_permalink":"","wpdc_publishing_response":"","wpdc_publishing_error":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[3,5],"class_list":["post-233","post","type-post","status-publish","format-standard","hentry","category-all","tag-ionic","tag-open-source"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v23.0 (Yoast SEO v23.0) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>The Art of a Successful Pull Request - Ionic Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ionic.io\/blog\/pull-requests\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The Art of a Successful Pull Request\" \/>\n<meta property=\"og:description\" content=\"When we started Ionic we didn&#8217;t have much experience managing popular open source projects. So when the project started taking off, gaining 6600 stars and 90 contributors submitting hundreds of pull requests from countries all over the world in just 6 short months, we had to learn quickly how to successfully manage a growing open [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ionic.io\/blog\/pull-requests\" \/>\n<meta property=\"og:site_name\" content=\"Ionic Blog\" \/>\n<meta property=\"article:published_time\" content=\"2014-06-20T08:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2015-12-16T19:52:37+00:00\" \/>\n<meta name=\"author\" content=\"Max Lynch\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@maxlynch\" \/>\n<meta name=\"twitter:site\" content=\"@ionicframework\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Max Lynch\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/ionic.io\/blog\/pull-requests#article\",\"isPartOf\":{\"@id\":\"https:\/\/ionic.io\/blog\/pull-requests\"},\"author\":{\"name\":\"Max Lynch\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/91f360cffbd804a464b0c4a87b5c5f1e\"},\"headline\":\"The Art of a Successful Pull Request\",\"datePublished\":\"2014-06-20T08:00:00+00:00\",\"dateModified\":\"2015-12-16T19:52:37+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/ionic.io\/blog\/pull-requests\"},\"wordCount\":351,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/ionic.io\/blog\/#organization\"},\"keywords\":[\"Ionic\",\"Open Source\"],\"articleSection\":[\"All\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/ionic.io\/blog\/pull-requests#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/ionic.io\/blog\/pull-requests\",\"url\":\"https:\/\/ionic.io\/blog\/pull-requests\",\"name\":\"The Art of a Successful Pull Request - Ionic Blog\",\"isPartOf\":{\"@id\":\"https:\/\/ionic.io\/blog\/#website\"},\"datePublished\":\"2014-06-20T08:00:00+00:00\",\"dateModified\":\"2015-12-16T19:52:37+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/ionic.io\/blog\/pull-requests#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/ionic.io\/blog\/pull-requests\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/ionic.io\/blog\/pull-requests#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/ionic.io\/blog\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"The Art of a Successful Pull Request\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/ionic.io\/blog\/#website\",\"url\":\"https:\/\/ionic.io\/blog\/\",\"name\":\"ionic.io\/blog\",\"description\":\"Build amazing native and progressive web apps with the web\",\"publisher\":{\"@id\":\"https:\/\/ionic.io\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/ionic.io\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/ionic.io\/blog\/#organization\",\"name\":\"Ionic\",\"url\":\"https:\/\/ionic.io\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png\",\"width\":1920,\"height\":854,\"caption\":\"Ionic\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/ionicframework\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/91f360cffbd804a464b0c4a87b5c5f1e\",\"name\":\"Max Lynch\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2018\/05\/max-avatar-150x150.jpg\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2018\/05\/max-avatar-150x150.jpg\",\"caption\":\"Max Lynch\"},\"description\":\"CEO\",\"sameAs\":[\"http:\/\/twitter.com\/maxlynch\",\"https:\/\/x.com\/maxlynch\"],\"url\":\"https:\/\/ionic.io\/blog\/author\/max\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"The Art of a Successful Pull Request - Ionic Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/ionic.io\/blog\/pull-requests","og_locale":"en_US","og_type":"article","og_title":"The Art of a Successful Pull Request","og_description":"When we started Ionic we didn&#8217;t have much experience managing popular open source projects. So when the project started taking off, gaining 6600 stars and 90 contributors submitting hundreds of pull requests from countries all over the world in just 6 short months, we had to learn quickly how to successfully manage a growing open [&hellip;]","og_url":"https:\/\/ionic.io\/blog\/pull-requests","og_site_name":"Ionic Blog","article_published_time":"2014-06-20T08:00:00+00:00","article_modified_time":"2015-12-16T19:52:37+00:00","author":"Max Lynch","twitter_card":"summary_large_image","twitter_creator":"@maxlynch","twitter_site":"@ionicframework","twitter_misc":{"Written by":"Max Lynch","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ionic.io\/blog\/pull-requests#article","isPartOf":{"@id":"https:\/\/ionic.io\/blog\/pull-requests"},"author":{"name":"Max Lynch","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/91f360cffbd804a464b0c4a87b5c5f1e"},"headline":"The Art of a Successful Pull Request","datePublished":"2014-06-20T08:00:00+00:00","dateModified":"2015-12-16T19:52:37+00:00","mainEntityOfPage":{"@id":"https:\/\/ionic.io\/blog\/pull-requests"},"wordCount":351,"commentCount":0,"publisher":{"@id":"https:\/\/ionic.io\/blog\/#organization"},"keywords":["Ionic","Open Source"],"articleSection":["All"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/ionic.io\/blog\/pull-requests#respond"]}]},{"@type":"WebPage","@id":"https:\/\/ionic.io\/blog\/pull-requests","url":"https:\/\/ionic.io\/blog\/pull-requests","name":"The Art of a Successful Pull Request - Ionic Blog","isPartOf":{"@id":"https:\/\/ionic.io\/blog\/#website"},"datePublished":"2014-06-20T08:00:00+00:00","dateModified":"2015-12-16T19:52:37+00:00","breadcrumb":{"@id":"https:\/\/ionic.io\/blog\/pull-requests#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ionic.io\/blog\/pull-requests"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/ionic.io\/blog\/pull-requests#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ionic.io\/blog"},{"@type":"ListItem","position":2,"name":"The Art of a Successful Pull Request"}]},{"@type":"WebSite","@id":"https:\/\/ionic.io\/blog\/#website","url":"https:\/\/ionic.io\/blog\/","name":"ionic.io\/blog","description":"Build amazing native and progressive web apps with the web","publisher":{"@id":"https:\/\/ionic.io\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ionic.io\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/ionic.io\/blog\/#organization","name":"Ionic","url":"https:\/\/ionic.io\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png","width":1920,"height":854,"caption":"Ionic"},"image":{"@id":"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/ionicframework"]},{"@type":"Person","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/91f360cffbd804a464b0c4a87b5c5f1e","name":"Max Lynch","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/image\/","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2018\/05\/max-avatar-150x150.jpg","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2018\/05\/max-avatar-150x150.jpg","caption":"Max Lynch"},"description":"CEO","sameAs":["http:\/\/twitter.com\/maxlynch","https:\/\/x.com\/maxlynch"],"url":"https:\/\/ionic.io\/blog\/author\/max"}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/233","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/comments?post=233"}],"version-history":[{"count":0,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/233\/revisions"}],"wp:attachment":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/media?parent=233"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/categories?post=233"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/tags?post=233"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}