Pull requests are a core part of making a change to any GitHub repository. Let's figure out how to use them effectively. ♪ (music) ♪ Pull requests are a means of submitting a change to another code base. You can do this whether you're a core contributor, or you're working at arm's length with a fork. If you're not a core contributor, you can fork this project, work on that change on your own and send that change back as a proposal on a pull request to the original author. It means that making a correction becomes easier than making a complaint, which is why GitHub has really facilitated the growth and development of Open Source. Just make that edit, make it better, everyone benefits. This also applies to closed projects, corporate projects, private repos. If you do have access to push to a repository, you should still work on a branch and send that pull request to get some review on your code. This means you're going to create a branch, start making some commits, and when you're ready to get it reviewed, send that back to everyone else on your team in that pull request. This means that a pull request is a conversation, not just a one-shot submission of what's on a branch, but rather, a little bit of dialogue and discussion, some revision to the code, that all appears in chronological order, and finally, an approval, or in the terrible case, a thumbs down that says, "this does not seem like a wise change to the code base." But in either of those two situations, the URL and the pull request lives on. You don't have to stop talking just because things were closed out and not accepted. You can continue to find out why it wasn't accepted and what changes you can make in the future to ensure all your pull requests will be accepted. This also serves as an educational tool for people who join the team at a later time. These pull requests are dialogues of what type of change might be culturally acceptable here, what are the expectations, requirements, formats that people expect stuff in, and you can save these URLs and point to them as educational tools for these new individuals. This means you don't have to forward on some email conversation about how a feature came to be. You can just point someone to a URL and they can look at it for all time. We're also interested in the technical inputs, not just the human ones. A CI system, continuous integration, like Travis, Hudson, Jenkins, Circle CI, Team City, can all integrate with a GitHub pull request and report the build status for this branch, the fundamental unit of a pull request, right in the line with that conversation. So that means along with the conversation and the changes to code, there's little build statuses that'll pop up to say, "yes, all the tests have passed" or "no, we have some failing test". It also affects the status of the Merge button providing you a warning saying, "wouldn't you like to have all the tests passing and this branch be clean, before you potentially press this Merge Pull Request button?" So now that we have CI status integrated with the idea of human feedback, we have holistic, human review plus technical set of tests, but not only on the contents of the branch, but on a predictive merge of both the branch and its destination, so you get to see into the future what this would be like if it was merged. This doesn't mean that that merge is permanent. It'll actually do that predictive merge, see how things go, and then let you know if you did merge this in, if you would be successful or not. So if CI reports a good status, you have social acceptance with a couple of thumbs up and ship its in the thread, it's time to press the Merge Pull Request button. Once that happens, you're also presented with the option to delete the branch, which sounds kind of scary, but isn't a bad thing. We don't have to really worry about closing out and deleting that branch because all of the commits are in the destination branch. They've been preserved, so you can delete that branch to let people know future development isn't happening over there. The pull request still stays around, in case you want the record of the discussion, and your identity and the credit for the work that you've done appears in the destination branch along with those merged in commits. Thanks for watching this Git and GitHub Foundations episode on the World renowned pull request. Don't forget to click Subscribe on any of these channels on the side. Or, ask us a question or leave a comment down below, or check out any of these other educational videos on Git and GitHub topics. ♪ (outro music) ♪