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
Subscribe to our Linux Newsletters
Find Linux and Open Source Jobs
Subscribe to our ADMIN Newsletters

Support Our Work

Linux Magazine content is made possible with support from readers like you. Please consider contributing when you’ve found an article to be beneficial.

Learn More

News