Git commands for pair programming

At my work I'm on an agile team and we do pair programming.  Here are some git commands I find useful and use almost every day:

We always make sure to branch off the latest main when creating new feature branches:

git checkout main && git pull
git checkout -b new-feature

At the end of the day, if we're not done with the new feature we create a "work in progress" WIP commit:

git add .
git commit -m 'WIP'

And push it up:

git push origin head

* As a rule we don't ever leave work on our development computers overnight.
* If someone is out the next day someone else can pickup that work and continue on.
* Pushing the code triggers a CI build showing any issues with specs as early as possible. 

You can also use the feature branch name here:

git push origin new-feature

"head" is easier to remember at the end of the work day, so that's what I always use.

The next day we may find we're pairing with different people.

If I'm driving again then I will reset my feature branch back to before the WIP commit to continue on with development:

git reset head~1

If the other person was driving last I will checkout the branch they WIP'd and then reset the commit:

git checkout main && git pull
git checkout new-feature
git reset head~1

If I already have the branch checked out locally I'll do a hard reset to sync up with the contents of our remote branch:

git reset --hard origin/new-feature

When the development feature branch is complete I will rebase it against main before merging:

git rebase main

If I have more than one commit on the feature branch then I will rebase interactively and squash the commits:

git rebase -i main

Side note: Dash (-) is very useful with git.  It means "the last branch I was on".  So if I was on my new-feature branch and switched to main and then wanted to switch back I could do:

git checkout -

Finally, when I'm ready to merge my feature branch to main I use --no-ff:

git checkout main
git merge new-feature

This explicitly creates a merge commit.

I could also use dash here since my feature branch was likely the last branch I was on:

git merge -

The git-pair gem is very useful for pair programming:

https://github.com/chrisk/git-pair

It lets you commit as a pair:

git pair gd yc
git add . && git commit -m 'WIP'

A configured .pairs file might look something like this:

pairs:
    yc: Yungchih Chen; yunchih.chen
    gd: Greg Donald; greg.donald
email:
   domain: example.com

Happy pairing!

git (3)