Besides the “basic” commands of Git, everyone has their own little Git tricks they use. I wanted to quickly write a list of my own which I tend to alias in my .gitconfig. Scroll to the bottom to see some fun git related commands that run outside of git! :)
Quick Amend
I often forget to commit a file, or leave a console.log in. I absolutely hate doing commits like removed console.log
. So instead, I add the file as if I was going to make a commit and run:
git commit --amend --reuse-message HEAD
Which will add the file to the last commit and reuse the old commit message. I alias this one as git amend
for quickfixes
NOTE: It is also possible to do git commit --amend --no-edit
for the same effect.
Rebase on top of origin/master
Older branches often fall behind pretty far, so far that I have to get up to speed to eliminate build errors, ci errors, or just resolve conflicts. My favorite is to do the following:
git fetch origin # fetch latest origin
git rebase origin/master
This way, I’m stacking my current branch commits on top of the latest version of master!
Last commit
Sometimes, the git log gets overwhelming. Due to my frequent use of the aforementioned amend command, i tend to want to view just the last commit in my git log:
git log -1
Checkout older version of a file (like a lock file!)
Occasionally, I screw up a file unrelated to my branch. Mostly, that happens with lock files (mix.lock, package-lock.json, etc.). Rather than reverting a commit which probably contained a bunch of other stuff, I just “reset” the file back to an older version
git checkout hash-goes-here mix.lock
And then I can commit the fix!
Cherry pick
An underrated command that I occasionally use. When a branch gets stale, it’s sometimes easier to just get the stuff you really need from it rather than try to get the entire branch up to speed. A good example, for me, have been branches that involve UI/backend code that is no longer necessary. In that case, I might want to cherry pick only certain commits from the branch. This will magically bring that commit over to the branch you’re on.
git cherry-pick hash-goes-here
#You can also do a list!
git cherry-pick first-hash second-hash third-hash
#Or by range
git cherry-pick first-hash..last-hash
The Reflog
This is such a power-user feature that I rarely use it. I mean, once a year! But it’s good to know about it. Sometimes, I lose commits. I delete a branch or reset or amend a commit I didn’t mean to mess up.
In those situations, it’s good to know reflog exists. It’s not a log of individual commits for the branch you’re on, it’s a log of all of your commits — even ones that were on dead branches. However, the log gets emptied from time to time (pruned) so that only relevant information stays.
git reflog
The command returns a log and what’s useful is cherry-picking or rebasing on top of a commit. Very powerful when you pipe into grep. Also you can do shorter version of reflog
git shortlog
git shortlog HEAD~20.. # last 20 commits
. .
Additional useful git commands by @jamesbaltar from our brownbag session. Jul 19 2019
delete local branch: git branch -D `git branch | grep enhancement`
interactive rebase: git rebase -i <commit> (ex: git rebase -i HEAD~3)
rebase from branch: git rebase <branch>
continue current rebase: git rebase --continue
revert a commit: git revert <commit>
cherry-pick: git cherry-pick <commit>
show commit tree: git log --graph --all --oneline
delete branch in remote: git push origin :<branch>
…
参照 : @antjanus