--- tags: blogpost --- # git-pr blog post :::warning transferred to a blog post ::: Title: ??? In CodeRefinery, we teach the benefit of small changes via pull requests in order to have better collaboration and review. But, when the changes get small enough, the time it takes to run the commands and open the pull requests begins to get annoying. I looked around for other tools that could make this faster, but wasn't quite satisfied with anything. So, I slowly started making something that evolved into git-pr, <https://github.com/NordicHPC/git-pr>. Let's talk about how it works. ## Making a change First, git-pr will help you to make the new feature branch. `git pr branch $branch_name` willcreate a new feature branch off of the upstreamdefault branch and check it out for you. You might want to `git fetch` first. Make your commits off of this branch. One trick I use is to write the first commit's message like I would write the pull request description. I decided it's usually not worth writing a separate description for the pull request itself. Perhaps there is some advantage to including the PR message in the git history itself, too. Then, to push the pull request, I use `git pr open`. This will push the current branch, and open a pull request on both Github and Gitlab. It will pop up an editor pre-seeded with the commit's message for you to further edit. Once you save and close, the pull request is made. One thing that git-pr will do is figure out the upstream and your local copy by yourself. Default upstream goes in priority order `upstream`→`origin`, Default personal fork goes in the order `local`→`origin`→`upstream`, so no matter if you first clone the upstream, or your own fork, you can always add the other with only one command and have it auto-detected with no renaming. `git pr prune` will remove all merged branches both locally and on the remote (possibly dangerous!). Various `git pr fetch*` commands will fetch pull requests into a local `pr/NNN` branch. There are various other small useful things, but These are *only* shorthands for things you can easily do with other git commands, but they save you time. It gets me closer to the ideal of making many small pull requests. ## About git-pr You can find it at <https://github.com/NordicHPC/git-pr> - it is a single shell script to copy to your path. It's beta-quality software: it is used by me and a few others all the time, but there will almost certainly be issues as others start using it. Send issues and PRs! It supports both Github and Gitlab, though Gitlab support is less well tested. There is a lot of prior art on different pieces here, there isn't much in git-pr that is completely new - you can see other options the git-pr README.