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