From 108ad1700b22affe7d5e88d958c3f0a3b5ea0d79 Mon Sep 17 00:00:00 2001 From: Luis Matos Date: Tue, 1 Jan 2019 18:26:01 -0400 Subject: [PATCH] --- GitTips.md | 117 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 GitTips.md diff --git a/GitTips.md b/GitTips.md new file mode 100644 index 0000000..9fd2891 --- /dev/null +++ b/GitTips.md @@ -0,0 +1,117 @@ +# Git Tips + +## Properly Configure your `~/.gitconfig` + +- Properly configure your user information +GitHub tracks your changes by using the information provided by your `~/.gitconfig`. If you work on more than one machine and your `~/.gitconfig` is not properly configured, you will probably end up with duplicated commits and disorganized history. Here are the lines you will have to modify according to your GitHub credentials. + +``` +[user] + name = Guilherme M. Trein + email = valid@email.com +``` + +- Properly configure your difftool and mergetool. +The difftool and mergetool are the software Git will execute during diff or conflict resolution operations respectively. +``` +[difftool "opendiff"] + cmd = /usr/bin/opendiff \"$LOCAL\" \"$REMOTE\" -merge \"$MERGED\" | cat +[diff] + tool = opendiff +[merge] + tool = opendiff +``` + +- Create aliases for the most common used commands. You will noticed that you will end up issuing the same Git command several times a day. Creating aliases to the most common used commands can save precious minutes every day. +``` +[alias] + st = status + ci = commit + br = branch + co = checkout + ds = diff --staged + changes = log -n1 -p --format=fuller + amend = commit --amend -C HEAD + undo = clean -f -d + undoci = reset HEAD~1 + unstage = reset HEAD -- + lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit + ls = log --pretty=format:\"%C(yellow)%h %C(blue)%ad%C(red)%d %C(reset)%s%C(green) [%cn]\" --decorate --date=short + lg-full = log --name-status --pretty=fuller +``` + +## Cheat Sheet + +### Create + + +| Operation | Command | +|------------------------------------------------|----------------------------| +| Clone an existing repository | `$ git clone ssh://user@domain.com/repo.git`| +| Create a new local repository | `$ git init` | + +### Local Changes + +| Operation | Command | +|------------------------------------------------|----------------------------| +| Changed files in your working directory | `$ git status` | +| Changes to tracked files | `$ git diff` | +| Add all current changes to the next commit | `$ git add .` | +| Add some changes in to the next commit | `$ git add -p ` | +| Commit all local changes in tracked files | `$ git commit -a` | +| Commit previously staged changes | `$ git commit` | +| Change the last commit (__Don‘t amend published commits!__) | `$ git commit --amend` | + +### Commit History + +| Operation | Command | +|------------------------------------------------|----------------------------| +| Show all commits, starting with newest | `$ git log` | +| Show changes over time for a specific file | `$ git log -p ` | +| Who changed what and when in | `$ git blame ` | + +### Branches and Tags + +| Operation | Command | +|------------------------------------------------|----------------------------| +| List all existing branches | `$ git branch` | +| Switch HEAD branch | `$ git checkout ` | +| Create a new branch based on your current HEAD | `$ git branch ` | +| Create a new tracking branch based on a remote branch | `$ git checkout --track ` | +| Delete a local branch | `$ git branch -d ` | +| Mark the current commit with a tag | `$ git tag ` | + +### Update and Publish + +| Operation | Command | +|------------------------------------------------|----------------------------| +| List all currently configured remotes | `$ git remote -v` | +| Show information about a remote | `$ git remote show ` | +| Add new remote repository, named | `$ git remote add ` | +| Download all changes from , but don‘t integrate into HEAD | `$ git fetch ` | +| Download changes and directly merge/ integrate into HEAD | `$ git pull ` | +| Publish local changes on a remote | `$ git push ` | +| Delete a branch on the remote | `$ git branch -dr ` | +| Publish your tags | `$ git push --tags` | + +### Merge and Rebase + +| Operation | Command | +|------------------------------------------------|----------------------------| +| Merge into your current HEAD | `$ git merge ` | +| Rebase your current HEAD onto (__Don‘t rebase published commits!__) | `$ git rebase ` | +| Abort a rebase | `$ git rebase --abort` | +| Continue a rebase after resolving conflicts | `$ git rebase --continue` | +| Use your configured merge tool to solve conflicts | `$ git mergetool` | +| Use your editor to manually solve con- flicts and (after resolving) mark file as resolved | `$ git add $ git rm ` | + +### Undo + +| Operation | Command | +|------------------------------------------------|----------------------------| +| Discard all local changes in your working directory | `$ git reset --hard HEAD` | +| Discard local changes in a specific file | `$ git checkout HEAD ` | +| Revert a commit (by producing a new commit with contrary changes) | `$ git revert ` | +| Reset your HEAD pointer to a previous commit and discard all changes since then | `$ git reset --hard ` | +| Reset your HEAD pointer to a previous commit and preserve all changes as unstaged changes | `$ git reset ` | +| Reset your HEAD pointer to a previous commit and preserve uncommitted local changes | `$ git reset --keep ` |