Table of Contents

Better than subversion as you can make local commits. Also, apparently like Ferrari compared to Hyundai

Fast clone

https://medium.com/pinterest-engineering/how-a-one-line-change-decreased-our-build-times-by-99-b98453265370

Commit/push checklist

  1. 'git add –all .'
  2. 'git status', make files you want to ignore are not included
  3. 'git diff <master_name>', make sure no unintended changes
  4. 'git commit -m “<meaningful description of what you changed>”', as 'git log' only prints the messages, not the diff
  5. 'git push origin <branch-name>'
  6. Revise ReviewBoard title and comments to have meaningful statements like Jonathan
    1. Also, update “Testing Done” section in ReviewBoard?

Common git commands

Meaning Command
Create git repo in current directory git init .
Ignore .pyc files Edit <rootdir>/.git/info/exclude and append *.pyc 1
I use *.pyc, *.dropbox, *.o
Add/scan for new files git add .
Commit git commit -m “<commit message>”
Add a remote repo (TODO: only do a subset?) git remote add origin https://github.com/nolanhergert/test.git
Commit to remote repo. Not sure what -u is for git push -u origin master
Add “upstream” repo git remote add upstream https://github.com/spark/firmware.git
Pull changes from remote repo git fetch origin
Check out and track remote branch git checkout –track origin/newsletter
Update local changes with remote changes git pull that's it?!?!
Change branches / commits (be sure to cd inside of directory) git checkout feature/hal or git checkout 01234567
Git bisect (find bugs using binary search)!
Add all modified files (don't have to do git rm from cmd line) git add -A .
Delete All Branches older than XX weeks
for k in $(git branch | sed /\*/d); do 
  if [ -z "$(git log -1 --since='1 week ago' -s $k)" ]; then
    git branch -D $k
  fi
done

(stackoverflow is wrong)

Create patch file git diff 01234567^! --ignore-all-space > diff.patch
Revert local working copy / uncommitted files git reset --soft HEAD^
View git log git reflog
UNDO STUFF git reset --hard HEAD@{X}
Find by tag git tag -l “*971*”
Checkout tag git checkout tags/SPS_IA_54.00.01.971.0
Ignore branch merges git log –no-merges –first-parent , or just use GitExtensions and view current branch only
Interactive rebase git rebase -i <branch name whose commits you want to diff from, usually master>
(will rewrite the history of the current branch you're on, so you might want to make a new branch first)
Interactive checkout / diff \ Used for reverting changes from master for a selective push git checkout -p <other branch>
Revert is not a reset! If you merge a separate branch but then don't want to actually do it. Reverting is not good enough. You have to reset –hard HEAD to delete the merge commit or in the worst case do an interactive rebase. Otherwise the branch commits are in your branch, they're just undone with a separate commit!

Git graph drawing demo

http://jsfiddle.net/yzj591tu/. Uses http://gitgraphjs.com/, It's ok…

Installing Git on Windows

Cloning a git repository

I know enough from hacking around on git to get it working for me, but I am by no means an expert!

To set it up on your computer:

w00t, you now you have a working clone of a repository! To work on the code:

Gitting it working

Unable to negotiate with XX.XXX.XX.XX: no matching host key type found. Their offer: ssh-dss fatal: Could not read from remote repository.

For me this worked: (added into ~\.ssh\config)

Host *

HostkeyAlgorithms +ssh-dss

PubkeyAcceptedKeyTypes +ssh-dss

Perforce

Just because.

To see changes based on an ID use Search→Go To→123456

Use find file or find by change set (Ctrl+G) to find what you're looking for.

Too bad there's not, “within this file find diff containing foo”, but maybe there is!