Confused by git? Here's a git crash course to fix that šŸŽ‰

Chris Achard - Sep 10 '19 - - Dev Community

This was originally posted as a twitter thread: https://twitter.com/chrisachard/status/1171124289128554498

NOTE: if you are looking for a very basic intro to git, I recommend reading this guide by Atlassian first.

Do you use git but still don't really understand it?

Here's a šŸ”„ git crash course šŸ”„ to fix that šŸŽ‰

1.

Git gives you a FULLY FEATURED repository on your local computer

This is different than other version control systems

Once you embrace that, you can start demystifying some of the git 'magic'

Decentralized repos

2.

Think of files (and changes) as being in 5 different places, or "states"

  • Working directory
  • Staging (Index)
  • Commit tree (local repo or HEAD)
  • Stash
  • Remote repo (github, Bitbucket, gitlab, etc)

Files move between 5 states

3.

Think of moving files (or changes) between those places:

git add working dir => staging

git commit staging => HEAD

git push HEAD => remote repo

git stash working dir <=> stash

git reset and git checkout to pull from upstream

Commands that move files between states

4.

Why have a dedicated staging area?

So that you can choose and review which files and changes to commit before committing.

Dedicated staging area

5.

git status shows changes in both your working directory and staging, but think of them as separate things.

git log shows the history of commits your local repository

git status and git log

6.

Learn to love git log

It's a snapshot of repo state: shows past commits as well as local HEAD, local branch, remote HEAD and remote branch

git log --oneline is compact way to view commit history

git log

7.

A branch is a reference to the tip of a line of commits

It automatically updates when new commits are added to that line

Making a new branch will diverge the tree at that point

branching

8.

A merge takes two branches and makes a NEW commit which combines them

If there are conflicts, you have to manually resolve them (no shortcuts!)

Merge

9.

git rebase lets you rewrite commit history

Applies your current commits directly to branch HEAD

Can squash all your commits into one to clean up history

Don't do this to public (remote) commits!

Rebase

10.

Some people say you should only ever merge to keep your entire history

Some people say you should always rebase before merging into master to keep a clean history tree

I say: do whatever works for you and your team šŸ¤·ā€ā™‚ļø

11.

HEAD can point to a branch or a specific commit

If it points to an old commit, that's called a "detached HEAD"

Editing in a detached HEAD state is dangerous (can lose work or cause problems combining work)

HEAD

12.

Many git commands can operate on either: individual files, commits, or branches

This can cause a lot of confusion - so make sure you know what TYPE of object you're operating on

13.

There are many ways to undo unwanted actions in git
Here are the most common:

unstage a file: git reset [file]

change last LOCAL commit: git commit --amend

undo local commit: git reset [commit BEFORE the one to undo]

undo remote commit: git revert [commit to undo]

14.

There's SO MUCH MORE I could have talked about!

What other things confuse you about git?

Comment below and I'll try to answer or find some resources for you šŸ™Œ

Ā 

Like this crash course?

Follow me on twitter for more: @chrisachard

Or you can join the newsletter: https://chrisachard.com/newsletter

Thanks for reading!

. . . . . . . . . . . . . . . . . . . . . . . .