10 helpful flags to use with git log command.
Tags: git, vcs, opensource, github
Published: 2020-02-25 15:12:57

---
title: 10 helpful flags to use with git log command.
published: true
description: Master searching in history of git, by learning these flags to use them with git log command.
tags: git, VCS, open-source, github
---

I’m part of the [Cloud DevOps Bertelesman Udacity phase 1 scholarship program](https://sites.google.com/udacity.com/bertelsmann-challenge/), and I’m participating in one of the optional challenges, the blog challenge which is to write a blog about one of the course Lessons, and I decided to write this blog about logging in git (VCS).

In this guide you’ll advance your capabilities of searching in the history of your repositories while working on your own projects, this will help a lot with tracking your changes and your teammate's changes as well.

We know that when it comes to logging or let’s say log files, it’s all about investigating or searching in the history for sure of your system or program that you’re working on, to know what’s going on with your stuff and check the current state of your system or program.

**NB:** *this guide will be as short as possible, so I will list just git commands with flags, and a short description to give you an overview of what this flag does, in this guide, we’re assuming `master` as our main branch, so whenever I talk about something it’s from `master` main branch perspective, let’s get started.*

- `git log`

This command is the base of everything we will discuss here in this guide, this command lists all the commits you have in your repository with the following information (commit SHA, date, author email, username and commit message) but in the current branch you’re in, let’s say `master` branch. 

- `git log --oneline`

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/tnhnixwlt7rk81528ryb.JPG)

The `--oneline` flag lists all the commits as `git log` does, but just in one line with the first 7 characters SHA + the commit message as shown above in the image.

- `git log --all`

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/7f39e2lpuq5gpkso2dc7.JPG)

This command lists all the commits that are not yet merged in our main branch, usually from other local branches, *current branch commits + other branches commits*, as you see over there in the image, there is a commit listed from the `feature-branch` even if we're just in `master` branch.

- `git log --merges`

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/c6qgz0tu21pigptojax7.JPG)

This command lists just the merged commits, which means just the commits coming from merge conflicts. Like if `feature-branch` gets merged into the `master` branch, conflict should be resolved before completing the merge, and a merge commit is added to the commits that state the conflict resolved between the content of same commits from different branches, these kind of commits will be listed alone using this command. it has its opposite command which is  `--no-merges` which do the opposite and lists all none merge commits, as you see in the image below the above merge commit doesn't appear here with the opposite `--no-merge` flag.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/ko7es5x0hhkupf81v9uk.JPG)

- `git log --patch`

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/7nqll4f7yrtt4yk5a4on.JPG)

There is a shorthand for this command which is `–p`, what this flag actually does is just listing the commits as `git log` does, but with the changes happened in this commit as well, the + sign means the additional lines of code added to the file/s in this commit, – sign shows the removed parts of code from the file/s in this commit and the white text means it's kept as it is, no changes happen to it.

- `git log --stat`

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/4fdcqn75r2llikp26lbr.JPG)

**Stat** stands for *statistics*, it lists all the commits with the files and the exact number of changes that happened in each file.

- `git log –S”<string>”`

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/7aqphyhagj3w4sxgam8p.JPG)

This flag is wonderful, it helps you to search for a specific text inside your files, let’s say you search about some names you put on an `HTML` file and you want to know in how many commits these names reside.

- `git log --grep=”value here”`

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/rvr69umwv8jx92qg3f6x.JPG)

This flag helps a lot if you want to search for a specific commit in terms of a commit message, just put your piece of text you want to search for in commit messages and all the commits match the piece of text you provided will be listed.

- `git log --author=”username or email”`

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/mpr4srgbdv4xxc5oq331.JPG)

Sometimes you might want filtering commits by author *username* or *email* because author here means his username or his email, so you could put one of them in between quotes as a string value, you can also search for two authors in the same time with **OR** operator in the following format: 

`git log --author=”username1\|username2”`

We used *slash* here as an escape character, because we're dealing with a *string* and this last one should be provided or the **OR |** operator will be considered as one character of the whole username, as in any programming languages like *JavaScript* especially in *RegExp*.

- `git log -<n>`

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/1ool1sbyr7odfb9bhq21.JPG)

*<n>* should be replaced by a number in order to list the most *<n>* recent commits, consider the following command `git log -3`, this one will list the most **three** recent commits.

- `git log -- file1`

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/32lvi891xzb2q9eb1acc.JPG)

You can also list commits by files, for example, `git log -- index.html` you can add multiple files, `git log -- index.html  script.sh`, and this last command lists all the commits that track the changes in these two files `index.html` and `script.html`.

All the above *flags* work together, so combine them whenever you need the output in such a desired format.


I hope you enjoyed this blog and it helps you to expand your knowledge in git.