Recs.
Updated
Specs
Pros
Pro Even a visual representation of various branches and how they're merged is possible
To visualize history:
git log --graph
Pro Customizable
You can customize it and/or integrate it into automated workflows. It has support for plugins, additional subcommands, and event hooks to perform automated tasks such as updating a bug database or kicking off tests.
Additionally, because it is a simple command line program, it is easy to create shell aliases, write scripts that invoke it, or integrate it into a text editor.
Cons
Con Hardest part of the learning curve is the ambiguity of some terms (us/them)
When merging (e.g. git checkout master && git merge my-branch), us refers to master, them is the branch you're merging in. When rebasing (eg git checkout my-branch && git rebase master), us refers to master, them refers to your current working branch. This seems counter-intuitive at first, making it harder to use the CLI to some, but after a while you kind of understand why the terminology is used in this way, and you get used to it.
Con Is a badly designed API
Git has awesome architecture but a bad CLI. The meanings of many commands overlap and contradict each other depending on the arguments passed. e.g. Just some: When checkout
is used with file path arguments it is a mutative action, changing the working tree but without those arguments it is for passive navigation. reset
is just like the mutative behaviour of checkout
except it does it for all files.branch
requires a flag to create a new branch but tag
doesn't to do the same with a tag.
https://stevebennett.me/2012/02/24/10-things-i-hate-about-git/