Skip to content

Instantly share code, notes, and snippets.

@cicorias
Forked from jaygooby/git_notes.md
Created August 30, 2017 11:03
Show Gist options
  • Save cicorias/f2c8a44a9ccb1728204a3bb845aca667 to your computer and use it in GitHub Desktop.
Save cicorias/f2c8a44a9ccb1728204a3bb845aca667 to your computer and use it in GitHub Desktop.
Git, you bloody git

Push all branches to new remote

If you've added a new remote, you might want to push all your branches to it:

git push new-remote --all

View log in different branch

Maybe you want to cherry-pick from a different branch and you need to know the commit hash:

git log different-branch

You can also look at the log for a specific file on that branch:

git log different-branch path/to/file

Side-by-side diff

git difftool -y -x "diff --suppress-common-lines -y -W 225" master 0ce112bd6dcbedd128566ce712d8cb5d98d765ae |less

-x to execute the diff command, -y for side-by-side, -W for width of lines

Which branch is a specific commit on?

git branch --contains 90be408084cc37b3bcc67eaf0b406ca4f1f381fd

Thanks http://stackoverflow.com/a/1419637/391826

Show non-merge commits to a branch

git log --first-parent --no-merges HEAD

Escape from detached head state

You just need to checkout the branch you want, e.g.

git checkout master

List branches by most recently changed

git for-each-ref --count=30 --sort=-committerdate refs/heads/ --format='%(refname:short)'

and if you want the most recently changed remote branches, swap refs/heads for refs/remotes. Both these via Stackoverflow.

git for-each-ref --count=30 --sort=-committerdate refs/remotes/ --format='%(refname:short)'

Grep through all stashed code

git stash list -p  | grep -i foo 

Pickaxe search all branches

git log --all -S"foo" -p 

Ignore line-ending differences when diffing

(You can't use this with git difftool or merge though)

git diff --ignore-space-at-eol

Prefer one branch over another when merging

Got a conflict during a merge? Know that you only care about the file in the other branch?

git checkout --theirs file/that/has/conflict

Know that yours is the correct one?

git checkout --ours file/that/has/conflict

Want to merge but know that you want your files to win any conflicts?

git merge -s recursive -X ours

Change a commit message

git commit --amend -m "New commit message"

Add forgotten files to last commit

git add forgotten_file other_forgotten_file ...
git commit --amend

Give a stash a meaningful name

git stash save "Nearly finished the blah feature, but have to fix yak first"

Show stashed files

git stash show stash@{1}

Diff a specific file with one in stash

git diff some_branch:spec/blueprints.rb  stash@{1}:spec/blueprints.rb

Diff just files in stash with a branch

# git difftool stash@{1} 
# would diff the whole current branch against the stash, 
# you probably just want the diffs of the files in the stash

for file in `git stash show --name-only stash@{1}`; do git difftool your_branch:$file stash@{1}:$file; done

Extract a single file from a stash

git checkout stash@{1} -- path/of/file/in/stash.rb
# note, can also pass multiple files to get them all at once
# git checkout stash@{1} -- path/of/file/in/stash.rb path/to/file2.txt path/to/another/file.jpg

Diffing uncommitted versus HEAD

# When you diff you can look at the files committed in HEAD, versus those on disk
#
# on disk:
git diff stash@{0}:spec/blueprints.rb spec/blueprints.rb

# in HEAD:
git diff stash@{0}:spec/blueprints.rb HEAD:spec/blueprints.rb

# staged:
git diff stash@{0} -- spec/blueprints.rb

# this omission of the filename and the separation with -- from the stash works with the other examples too

Diff what's going to be merged

# You're working in feature/my-branch and you want to merge from master
#
# git fetch origin master
# git difftool feature/my-branch...origin/master
#
# Note the three ... 
# Without them you're comparing? which is a different thing entirely
# if it's all looking good, then git merge origin master
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment