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
(incl. VAT)