Recommended.
This book is primarily for software developers who are familiar with their system’s command line, and the examples provided were developed on the macOS and Ubuntu Command Lines. The authors state that you should treat the book as “a series of topics building on one another sequentially”. I found it necessary to refer back to previous chapters to refresh my memory and I expect to do the same after I have finished reading this book – once read, this book will remain a useful resource to consult.
While Software Developers are the target audience for Git, the authors also state that Data Scientists, Graphic Designers, Academics, and Content Authors would find the book useful.
The chapters are grouped into five parts, starting with ‘Thinking in Git’, which introduces Git and puts the reader into a ‘Git mindset’.
Chapter 1, ‘Introduction to Git’, starts off by declaring “Git is a content tracker” and that it is a “distributed version control system”. It does a fairly good introduction to Git. In particular, it refers to the very helpful message provided by git when you run git with no parameters – it lists common commands grouped by situation and more. The built-in git help pages are invaluable, although somewhat demanding.
Chapter 2, ‘Foundational Concepts’, goes into detail, backed up by actual examples. I didn’t understand this chapter on my first reading of it and the ‘hello’ example towards the end of the chapter used more plumbing commands than I was comfortable with at the time.
Part Two, ‘Fundamentals of Git’, starts with some examples of high-level and low-level uses of Git and continues with 5 chapters – Branches, Commits, File Management and the Index, Merges and Diffs.
The ‘Branches’ chapter is all about separate lines of development within a project. Some of it is a little complicated, especially on the first reading. Next, ‘Commits’ is all about identifying commits and commit ranges, a challenging chapter. ‘File Management and the Index’ explains the staging area, tracking – and ignoring files (via .gitignore), making commits, deleting and renaming files.
Chapter 6, ‘Merges’, has a flawed example. Experienced users wouldn’t trip over it but those who do may end up sharing their Home directory with more people than they intended. On page 125, they have an example that creates a directory and then invokes git init without pointing out that the git init command must be invoked inside the intended directory. The chapter goes on to cover merges and various useful commands for resolving conflicts that may occur during a merge. Anyone can branch. It is harder to merge the differing branches later on.
Chapter 7, ‘Diffs’, could have been placed before the ‘Merges’ chapter as the latter requires the use of the git diff command.
I then reached the point in my Git usage where I reflected on what I have learnt and the four pages of quick reference notes I had gleaned from this book so I did a little bit of coding.
The next three parts – ‘Intermediate Skills’, ‘Advanced Skills’, and ‘Tips and Tricks’ are interesting, and challenging and it took another couple of months to make my way through them. They need at least a working knowledge of Git to be understandable. I did note a number of errors in bash command line snippets and instances of where object-ids cited in examples and the text don’t always match up, making things difficult for some readers.
I do feel confident enough to comment on a couple of things. Chapter 17, ‘Tips, Tricks, and Techniques’ is a mixed bag. I found the part that introduced the git whatchanged and git grep commands to be particularly useful. Chapter 18, ‘Git and Github’, is not an introduction to getting to grips with GitHub but a variety of useful topics.
A key thing I gleaned from this book is try not to need to re-write history. All sorts of technical problems are incurred by that. I suspect that clean git histories are of more use to consultancies than the rest of us.
This book contributed to my knowledge of Git and I will continue to read about Git.
Website: https://www.oreilly.com/library/view/version-control-with/9781492091189










