Table of Contents

1 Commit   slide

Making history

1.1 Messages

1.1.1 Bad examples   slide

quick fix
Fix bug
Minor UI changes
temp save
make a logic code correctly
update payment screen

1.1.2 Bad examples   slide

committing this change by ABC

=> this information is useless

another fix for #abc

=> And #abc is a long ticket with ~30 comments

fix error in translation file

=> "fix translation file containing wrongly-escaped unicode characters"

change code for ...

=> please actually briefly describe the changes

hack image search while Anh is away

=> not even sure how to think about this

Temporal commit, save XYZ's current work XYZ

=> split it into coherent commits with decriptive messages, by asking XYZ

1.1.3 Bad examples   slide

commit missing files

=> rewrite history to include them in the proper commits

Rollback if exception happens

=> nice try, but not good enough

Update data schema - refactor backend code to add new timesheet entry - display tickets fields in timesheet

=> don't do multiple things in one commit

1.1.4 What is the purpose of commit messages?   slide

Who will read them? A lot of people:

  • Code reviewers
  • Deployer
  • Other team members
  • Future team members
  • A-year-later you
  • Customers

Think of them when you write the commit message

1.1.5 Structure   slide

summary line + explaining paragraphs

fix memory leaks in questionnaire builders

                  - Release subviews on creating new ones
                  - Unbind event handlers on releasing a view
clean up organization.customization_options migrations

                  - Stop using string interpolation.
                  - Use store.execute instead of building raw cursor from raw connection.
                  - Stop depending on models.customization_options.customization_options.

Don't do this, use --author

NTA: add translation for close cases

Don't use -m flag. Use an external editor to edit the message, or

# Multi-line message, enter Ctrl-D when done
                  git commit -F -

2 Blame   slide

Quickly figure out who wrote a piece of code to ask for explanation

git blame

3 Log   slide

Reviewing history

3.1 Format   slide

Short hash + message

git log --pretty=oneline --abbrev-commit

Detailed, showing changes

git log -p

3.2 Filtering   slide

3.2.1 By range   slide

Find out what changes a branch contains

# In b not in a
                  git log --pretty=oneline --abbrev-commit a..b
                  # In master not here
                  git log --pretty=oneline --abbrev-commit ..master
                  # In here not master
                  git log --pretty=oneline --abbrev-commit master..

3.2.2 By time   slide

Review a period of work

git log --pretty=oneline --abbrev-commit --since='1 month ago'
                  git log --pretty=oneline --abbrev-commit --since='2014-01-01'
                  git log --pretty=oneline --abbrev-commit --until='2 weeks ago'

3.2.3 By author   slide

View a person's work

git log --pretty=oneline --abbrev-commit --author=Anh

3.2.4 By path   slide

Show only changes to a file (or a directory), only in commits changing it

# Viewing dependency changes over time
                  git log -p --relative=requirements.txt -- requirements.txt

3.2.5 Search   slide

In commit messages

git log --pretty=oneline --abbrev-commit --grep='push.*notification'

In diffs

git log --pretty=oneline --abbrev-commit -GUserNotificationToken

In actual additions/removals

git log --pretty=oneline --abbrev-commit -SUserNotificationToken

3.2.6 By commit types   slide

View only merged features (e.g. combining with range)

git log --pretty=oneline --abbrev-commit --merges

View only actual code changes

git log --pretty=oneline --abbrev-commit --no-merges

Author: Nguyễn Tuấn Anh

Created: 2014-03-13 Thu 20:54

Emacs 24.3.1 (Org mode 8.2.5h)