git log – the Exact Formulation

Partager

news portray

Whenever you occur to’re managing a elaborate git codebase with more than one developers, then you definately might well perchance smartly be the usage of a tool like GitHub or BitBucket to delve into the history and figure out department and merge points.

These GUIs are mountainous for providing a positive particular person interface for managing pull requests and straight forward histories and the like, however when the workflow SHTF there’s no substitute for the usage of git log and its comparatively dinky-identified flags to in truth dig into the order.

You’re going to traipse thru this with me in remark that I know you’ve obtained it. Form the instructions in dauntless to apply.

That is in line with subject cloth from my guide Study Git the Laborious Procedure, a free sample accessible right here.

An Instance Git Repository

Bustle this to bag a rather conventional git repository that I work on:

$ git clone https://github.com/ianmiell/cookbook-openshift3-frozen
$ cd cookbook-openshift3-frozen

NB right here’s a reproduction of the unique repo, ‘frozen’ right here to carry out precise output. 

 

git log

git log is the vanilla log expose it’s likely you’ll well perchance presumably very smartly be doubtlessly already conversant in:

$ git log

commit f40f8813d7fb1ab9f47aa19a27099c9e1836ed4f 
Author: Ian Miell 
Date: Sat Mar 24 12:00:23 2018 +0000

pip

commit 14df2f39d40c43f9b9915226bc8455c8b27e841b
Author: Ian Miell 
Date: Sat Mar 24 eleven:fifty five:18 2018 +0000

ignore

commit 5d42c78c30e9caff953b42362de29748c1a2a350
Author: Ian Miell 
Date: Sat Mar 24 09:forty three:Forty five 2018 +0000

most modern

It outputs 5+ strains per commit, with date, author commit message and id. It goes in reverse time expose, which is provocative for a selection of cases, as it’s likely you’ll well perchance presumably very smartly be mostly drawn to what took build just nowadays.

NOTE: output can fluctuate reckoning on model, aliases,
and whether or no longer it’s likely you’ll well perchance presumably very smartly be outputting to a terminal!
My model right here modified into 2.7.Four.

--oneline

More in most cases than no longer I don’t care about the author or the date, so in expose that I can stumble on more per display camouflage, I use --oneline to most positive indicate the commit id and comment per-commit.

$ git log --oneline
ecab26a JENKINSFILE: Make stronger from 1.three most positive
886111a JENKINSFILE: default is master if no longer a multi-department Jenkins carry out
9816651 Merge department 'master' of github.com:IshentRas/cookbook-openshift3
bf36cf5 Merge department 'master' of github.com:IshentRas/cookbook-openshift3

--decorate

You might well perchance private more data than that, though, like which department modified into that commit on? The attach are the tags?

The --decorate flag offers this.

$ git log --oneline --decorate
ecab26a (HEAD -> master, foundation/master, foundation/HEAD) JENKINSFILE: Make stronger from 1.three most positive
886111a JENKINSFILE: default is master if no longer a multi-department Jenkins carry out
9816651 Merge department 'master' of github.com:IshentRas/cookbook-openshift3

 

--all

I use this so worthy it’s in my muscle memory.

$ git log --oneline --decorate --all
ecab26a (HEAD -> master, foundation/master, foundation/HEAD) JENKINSFILE: Make stronger from 1.three most positive
886111a JENKINSFILE: default is master if no longer a multi-department Jenkins carry out
9816651 Merge department 'master' of github.com:IshentRas/cookbook-openshift3
[...]
a1eceaf DOCS: Identified order added to beef up doctors
774a816 (foundation/first_etcd, first_etcd) first_etcd
7bbe328 first_etcd check
654f8e1 (foundation/iptables_fix, iptables_fix) retry added to iptables to extinguish whisk prerequisites with iptables updates
e1ee997 Merge department 'style'

Are you able to stumble on what it does? Whenever you occur to can’t, study it to --oneline above and dig around to figure it out. (Endure in mind that your model might well perchance assemble --all by default when output goes to the terminal in its attach of a file).

More moderen variations of git put this in the terminal by default, so issues are improving for my fingers.

That’s mountainous, however what would be mountainous is a visual illustration of all these branches…

--graph

--graph offers you that visual illustration, however in the terminal. Whereas it goes to no longer stumble on as slick as some git GUIs, it does private the abet of being continuously considered anyplace, and arrangement more configurable to your particular needs.

And if you occur to’re searching to half collectively what took build on a 15-group challenge that doesn’t rebase, it might perchance well perchance well be obligatory…

$ git log --oneline --decorate --all --graph
* ecab26a (HEAD -> master, foundation/master, foundation/HEAD) JENKINSFILE: Make stronger from 1.three most positive
* 886111a JENKINSFILE: default is master if no longer a multi-department Jenkins carry out
* 9816651 Merge department 'master' of github.com:IshentRas/cookbook-openshift3
| 
| * bf36cf5 Merge department 'master' of github.com:IshentRas/cookbook-openshift3
| | 
| | * 313c03a JENKINSFILE: like a flash mode is INFO level most positive
| | * 340a8f2 JENKINSFILES: divided up into separate jobs
| | * 79e82bc JENKINSFILE: upgrades-particular Jenkinsfile added
| * | dce4c71 Add common sense for added FW for master (When no longer a node)
* | | d21351c Replace utils/atomic
|/ / 
* | 3bd51ba Repair order with ETCD
* | b87091a Add missing FW for HTTPD
|/ 
* a29df49 Lacking (s)
* 51dff3a Repair rubocop

DON’T PANIC!

The above might well perchance well be laborious for the newcomer to parse, and there’s dinky accessible to manual you, however a few pointers right here can form it worthy more uncomplicated to read.

The * means that there’s a commit on the motorway, and the small print of the commit (right here the commit id, and first line of the comment) are on the factual hand aspect.

The strains and relate of the * expose the lineage (or parentage) of each change. So, to prefer these three strains as an instance:

| * bf36cf5 Merge department 'master' of github.com:IshentRas/cookbook-openshift3
| | 
| | * 313c03a JENKINSFILE: like a flash mode is INFO level most positive

The golf green pipes expose that whereas the two changes listed right here had been happening, yet every other department had a gap between its two changes (9816651 and d21351c).

The blue line takes you to one guardian of the bf36cf5 merge (what’s the commit id of the blue guardian?), and the purple one goes to the many guardian commit (313c03a).

It’s rate taking a dinky bit time to figure out what’s happening right here, as this is succesful of well perchance pay dividends in a disaster later…


Whenever you occur to love this post, you’ll like my guide Study Git the Laborious Procedure

It covers all this and arrangement more in a the same style.

learngitthehardway


--simplify-by-decoration

Whenever you occur to’re having a stumble on at the total history of a challenge and need to bag a in truth feel for its form sooner than diving in, it’s likely you’ll well perchance presumably need to obtain most positive the many functions of change (ie the strains tormented by -–decorate above).

These prefer away any commit that wasn’t tagged, branched (ie there’s no reference). The inspiration commit is continually there too.

$ git log --oneline --decorate --all --graph --simplify-by-decoration
* ecab26a (HEAD -> master, foundation/master, foundation/HEAD) JENKINSFILE: Make stronger from 1.three most positive
| * 774a816 (foundation/first_etcd) first_etcd
|/ 
| * 654f8e1 (foundation/iptables_fix) retry added to iptables to extinguish whisk prerequisites with iptables updates
|/ 
* 652b1ff (foundation/contemporary-common sense-beef up) Repair order iwith kitchen and prefer away sensitive output
* ed226f7 First commit

Try tagging a selected commit no longer listed above, and then re-traipse the expose.

File Info

The usage of --oneline on the total is a chunk sparse, so --stat can present you with advantageous data about what modified.

The quantity signifies the numbers of strains that had been modified, with insertions represented by a + signal, and deletions by a -. There’s no thought of a ‘change’ to a line as such: the aged line is deleted, and then the contemporary one added even supposing most positive one personality modified.

$ git log --oneline --decorate --all --graph --stat
* ecab26a (HEAD -> master, foundation/master, foundation/HEAD) JENKINSFILE: Make stronger from 1.three most positive
| Jenkinsfile.upgrades | 2 +-
| 1 file modified, 1 insertion(+), 1 deletion(-)
* 886111a JENKINSFILE: default is master if no longer a multi-department Jenkins carry out
| Jenkinsfile.elephantine | 2 +-
| Jenkinsfile.upgrades | 2 +-
| 2 files modified, 2 insertions(+), 2 deletions(-)

Whenever you occur to behold --stat laborious to be aware, then an different is to use --name-most positive, however with that you lose the facts about numbers of changes to files.

Regex on Commits

This one’s additionally in truth helpful. The -G flag lets you obtain for all commits and most positive return commits and their files whose changes encompass that regexp.

This one, as an instance, appears for changes that comprise the textual explain material chef-client

$ git log -G 'chef-client' --graph --oneline --stat
...
* 22c2b1b Repair script for deploying foundation
| scripts/origin_deploy.sh | Sixty five ++++++++++++-----------------------------------------------------
| 1 file modified, 12 insertions(+), Fifty three deletions(-)
... 
| * | 1a112bf - Switch origin_deploy.sh in scripts folder - Enable HTTPD at startup
| | | origin_deploy.sh | 148 ----------------------------------------------------------------------------------------------------------------------------------------------------
| | | scripts/origin_deploy.sh | 148 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
| | | 2 files modified, 148 insertions(+), 148 deletions(-)
... 
| * | 9bb795d - Add MIT LICENCE model - Add script to auto deploy foundation instance
|/ / 
| | origin_deploy.sh | ninety three +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
| | 1 file modified, ninety three insertions(+)

Whenever you occur to’ve ever spent ages having a stumble on thru git log --patch output wanting for a selected change right here’s a godsend…

The eccentrically-named --pickaxe-all offers you data about all files that modified in the commit, as a replacement of factual these that matched the regexp in the commit.

$ git log -G 'chef-client' --graph --oneline --stat --pickaxe-all

Try it out!

 


Whenever you occur to love this post, you’ll like my guide Study Git the Laborious Procedure

It covers all this and arrangement more in a the same style.

learngitthehardway


Whenever you occur to cherished this post, strive:

Five Key Git Ideas Outlined the Laborious Procedure

Produce Your Like Git Diagrams

Ten Issues I Wish I’d Identified About bash

A Non-Cloud Serverless Utility Pattern The usage of Git and Docker

Read More

(Visité 12 fois, 1 aujourd'hui)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *