Git commands I use a lot but can't remember!

A few useful git commands that I often need

I'm posting these reminders here so they're all in one place, because yes I do forget some of these, a lot...

Change author for last commit

git commit --amend --author="John Doe <[email protected]>"

Git offers a really simple way to do this, I guess a rebase happens behind the scenes but this is a less scary way to do it.

Remove all deleted files before staging


git ls-files --deleted -z | xargs -0 git rm

This just lists all deleted files and pipes them through to git rm, very useful when you've been a bit busy on the deletions.

See current config settings

git config -l

See all config settings.

Clone a remote repo

git clone https://github.com/user/repository.git

Clone the remote repository into current directory.

List remote urls

git remote -v

Show a list of all of the remotes for this repo.

Change message for last commit

git commit --amend -m 'New message goes here'

Useful for when you've missed something from the commit message or you've just ballsed it up.

Show diff for last commit

git log -p -1

Lists the diffs for the most recent commit

Show log on single line for last 5 commits

git log --pretty=oneline -5

Lists the last 5 commits on a single line, a lot more readable.

Revert to previous commit removing all work since

git reset --hard COMMITID

Resets to COMMITID and removes all work since in the worktree.

git clean -f -d

Removes all untracked files, use this after a git reset to remove new files, git reset will have reverted to previous commit versions of the files but won't delete any new files, git clean does this.

Branching

git branch new-feature

Create a new branch called new-feature.

git checkout new-feature

Checkout the new feature branch ready for working on it.

git checkout -b new-feature

This combines the above two and creates the feature branch then checks it out.

git checkout master

Checkout master again for fixes etc whilst working on new-feature.

git push -u origin new-feature

This will push the new feature branch up to the remote origin such as github (other git services are available, but let's face it, not as good). The -u flag tells git to consider the origin the upsteam branch to track.

Merging

git merge new-feature

Merge the new-feature branch into the current branch. Reminder, this merges into the current branch!

git merge --no-ff new-feature

Merge new-feature into current branch and also generate a merge commit.

Merge (squash) previous commits into one

git rebase -i HEAD~2

This is a really useful way to disguise an ugly trail of commits like ('fixed it..... fixed it again...... three times a fix......this really should fix it') etc.

Essentially all that you're doing here is telling git to go backwards from HEAD - 2 commits and recommit them (rebasing is the correct term I think, given the command name it's a fair guess). The recommit process will allow you to tell it which ones to 'squash' into the others. Generally I just squash all commits beneath the top one and this works, because ultimately git rebase scares me and I know that this works so why risk anything else.

Add Remote Tracking

git branch -u upstream/foo

This will track the remote branch upstream/foo from the current branch, add the required local branch after upstream/foo if not tracking from the current branch.


Article Category Tags

Code