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'
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)
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
4.
Why have a dedicated staging area?
So that you can choose and review which files and changes to commit before committing.
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
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
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
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!)
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!
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)
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!










Oldest comments (38)
Great article! I also recommend the atlassian git docs, which helped me get comfortable with git
Git is the expression used for an old angry man.
Either git good, or git’ out.
Either way someone is going to be frustrated.
Just realised i missed out on a final pun.
"Either way someone is going to git' frustrated" ...
🤣
I love puns
I was really getting confused, till I realized I was seeing the word 'comment' instead of 'commit'. Now it makes much more sense! Great article.
🤣
nice course...i'm however a bit confused about "stash".. first time i read this. What is that ?
Thanks - and yeah, I'm realizing that I didn't explain stash... like at all in the post 🤦♂️ oops.
Stash is a temporary place you can put work in progress. Usually, the workflow goes something like this:
You are working on something in your working directory
a high priority bug comes in. To fix it, you have to switch branches and clear your working directory of the changes you already have made
instead of trying to save your work for later in a commit or a special branch, etc, you can put it in the "stash" with
git stashThen you go and fix the high priority bug
later, you can re-apply what was in the stash with
git stash applyorgit stash pop(pop will remove it from the stash; apply just brings it back over)then you can continue to work on whatever you were working on from bullet 1.
Hope that helps a bit! I probably should have had a separate point for it in the guide 😀
Thank you!! I am currently learning git
Glad it helped!
Wow, thank you.
On fire with these recent posts Chris!! 🔥
Thanks!
Love it, so clear
First time hearing about
git log --oneline. A truly cleaner way to look at the history.Thanks Chris
Glad it helped!
And there is much more... try
git log --all --decorate --oneline --graph:)Yes! there's a whole bunch :) Here's the full docs if you're interested: git-scm.com/docs/git-log (examples at the bottom)
Just did it! Thanks.
Now I feel like a 10x developer :)
Some comments may only be visible to logged-in visitors. Sign in to view all comments.