Skip to content

Instantly share code, notes, and snippets.

@ashnur
Forked from jaygooby/git_notes.md
Created April 6, 2016 03:34
Show Gist options
  • Save ashnur/b211c66b838c0c0d90add44f9a36518d to your computer and use it in GitHub Desktop.
Save ashnur/b211c66b838c0c0d90add44f9a36518d to your computer and use it in GitHub Desktop.
Git, you bloody git

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