Tips from the experts on getting more from Git

Tip 10: Automatic Analysis

Adam Spiers has no qualms about advertising his own product, git-deps [15]. This tool is used to automatically analyze dependencies between commits in a Git repository. According to Spiers, git-deps has plenty of uses, including:

  • porting between branches
  • splitting a patch series into independent parts
  • supporting cooperation in development teams
  • automatic integration of fix-up commits

The tool also helps you clean up the private commit history before publishing.

Tip 11: Fixups and Rebases

Alvaro Saurin stresses the importance of a correct understanding of git commit -fixup=Commit, which marks the commit as a fixup of a previous commit, and its counterpart git rebase -autosquash, which merges the original commit and the fixup into a new commit. For example, suppose a developer is at the following location:

Master -> Modification 2 -> Modification 1 -> Current modification

In the next step, the developer could then initiate a fixup commit for Change 2. The command for this is git commit --fixup=HEAD~1. The results would look like this:

Master -> Change 2 -> Change 1 -> Fixup-Commit-for-Change-2

A subsequent git rebase -i --autosquash then automatically merges the fixup with change 2 (shown here in two steps):

Master -> Change 2 -> Fixup-for-change-2 -> Change 1 Master -> New change 2 -> Change 1

This sequence of steps could also be defined as a Git alias and executed in one step. Developer Bernhard Wiedemann shows how this works in Listing 5.

Listing 5

Autosquash Alias

 

And this – as Benjamin Zeller notes – could be activated as the default via the Git configuration.

The alias, on the other hand, is not necessary for people who use Adam Spier's git-fixup [16]. The developer is convinced that the approach described is one of the most fundamental that a developer needs to understand in Git.

Unsurprisingly, the sequence can also be embedded in Emacs and called with just three keys. C opens the commit menu; F starts the instant fixup; you can then choose what you want to fix. A "." tells Emacs to create the fixup commit, automatically going through all unrecorded changes, interactive rebasing, and even leaving the stash at the end.

Tip 12: In Color and Colorful!

A tip that adds color to Git also comes courtesy of Bernhard Wiedemann. According to his own statement, he found the following, not really pretty alias "somewhere on the Internet":

lfi = log HEAD --graph --all --abbrev-commit --full-history --color -pretty=format:'%Cred%h%Creset -%C(yellow) %d%Creset%s%Cgreen(%cr) %C(bold blue)<%an>%Creset' --date=relative

He quickly got used to the clarity of a colored representation of the tree diagram in the history.

Buy this article as PDF

Express-Checkout as PDF
Price $2.95
(incl. VAT)

Buy Linux Magazine

SINGLE ISSUES
 
SUBSCRIPTIONS
 
TABLET & SMARTPHONE APPS
Get it on Google Play

US / Canada

Get it on Google Play

UK / Australia

Related content

  • Tree View

    Complex Git projects sometimes require a better view of the dependencies and branches. Several tools offer GUI options for Git. We take a look at gitk, gitg, git-gui, and GitAhead.

  • Remote Git Repositories

    Software projects often comprise several code branches, some of which exist in parallel. Git supports community code development through remote repositories and code branching.

  • Etckeeper

    Etckeeper keeps order in global configuration files and prevents problems with accidentally deleted files.

  • Version Control with Git

    The Git version control system is a powerful tool for managing large and small software development projects. We'll show you how to get started.

  • Git Ready

    If you develop open source software, you need to know how to use Git. Information on Git fills books, but this basic overview will get you started with a vital open source development tool.

comments powered by Disqus