103
Git session Hannes Tack

Git session Dropsolid.com

Embed Size (px)

DESCRIPTION

Git session

Citation preview

Page 1: Git session Dropsolid.com

Git session Hannes Tack

Page 2: Git session Dropsolid.com

Overview

1.What is git?2.Basic git3.Workflow4.Tips and tricks

Page 3: Git session Dropsolid.com

What is git?

Page 4: Git session Dropsolid.com

What is git?

Open source distributed version control system

Page 5: Git session Dropsolid.com

Distributed

• Everything is local

– Fast– Every clone is a backup–Work offline

Page 6: Git session Dropsolid.com

Basic git

Page 7: Git session Dropsolid.com

Installing Git

• Download from http://git-scm.com/downloads

• Launch the installer• Or Xcode, homebrew, …

Page 8: Git session Dropsolid.com

Configuring Git

• $ git config --global user.name 'Hannes Tack’• $ git config –global user.email

[email protected]

Page 9: Git session Dropsolid.com

Clone a repo

Page 10: Git session Dropsolid.com

Clone a repo

• Clone an existing repo or create a new one:

– $ git clone user@host:repo

Page 11: Git session Dropsolid.com

.gitignore

Page 12: Git session Dropsolid.com

.gitignore

• What?

–Makes git ignore files / directories– Repo specific or global– Drupal example of a .gitignore file:

http://drupalcode.org/project/drupal.git/blob/HEAD:/example.gitignore

Page 13: Git session Dropsolid.com

.gitignore

# Ignore configuration files that may contain sensitive information*/sites/*/settings*.php# Ignore paths that contain user-generated content.*/sites/*files*/sites/*/private# Ignore editor specific filesDrupal.sublime-projectcompletions*.sublime-project*.sublime-workspace# Ignore OS specific files.DS_Store

Page 14: Git session Dropsolid.com

global .gitignore

• Create any file:- $vi ~/.gitignore_global

• Add paths to be ignored.- Example: https://gist.github.com/4321950

• Use as global gitignore file:

Git config –global core.excludesfile~/.gitignore_global

Page 15: Git session Dropsolid.com

local .gitignore

• Create a .gitignore file:- $vi ~/your_project/.gitignore

• Place it anywhere in your repo

• Add paths to be ignored, relative to the location of the file.

Page 16: Git session Dropsolid.com

A Basic Workflow

Page 17: Git session Dropsolid.com

A basic workflow

• Write code• Stage your changes• Review your changes• Commit your changes• Push your changes

Page 18: Git session Dropsolid.com

A basic workflow

• Write code• Stage your changes• Review your changes• Commit your changes• Push your changes

Page 19: Git session Dropsolid.com

A basic workflow

Page 20: Git session Dropsolid.com

A basic workflow

Git diff

• Git diff shows what you’ve changed• $ git diff <filename>

Page 21: Git session Dropsolid.com

A basic workflow

Page 22: Git session Dropsolid.com

A basic workflow

• Write code• Stage your changes• Review your changes• Commit your changes• Push your changes

Page 23: Git session Dropsolid.com

A basic workflow

Page 24: Git session Dropsolid.com

A basic workflow

Page 25: Git session Dropsolid.com

A basic workflow

Page 26: Git session Dropsolid.com

A basic workflow

Page 27: Git session Dropsolid.com

A basic workflow

Page 28: Git session Dropsolid.com

Git add

Page 29: Git session Dropsolid.com

A basic workflow

Page 30: Git session Dropsolid.com

A basic workflow

Page 31: Git session Dropsolid.com

A basic workflow

Page 32: Git session Dropsolid.com

A basic workflow

Staged files• git diff --staged shows the changes

that are staged• git reset HEAD <filename> removes a

file from “staging”

Page 33: Git session Dropsolid.com

A basic workflow

• Write code• Stage your changes• Review your changes• Commit your changes• Push your changes

Page 34: Git session Dropsolid.com

Git commit

Page 35: Git session Dropsolid.com

A basic workflow

Page 36: Git session Dropsolid.com

A basic workflow

Page 37: Git session Dropsolid.com

A basic workflow

Git commit• Changes are committed to local repo• Others won’t see these changes yet• Commit message is required• And should look like ‘Issue #123: describe

what you changed.’

Page 38: Git session Dropsolid.com

A basic workflow

• Write code• Stage your changes• Review your changes• Commit your changes• Push your changes

Page 39: Git session Dropsolid.com

Git push

Page 40: Git session Dropsolid.com

A basic workflow

Page 41: Git session Dropsolid.com

A basic workflow

Page 42: Git session Dropsolid.com

A basic workflow

Page 43: Git session Dropsolid.com

Merging

Page 44: Git session Dropsolid.com

A basic workflow

• Remote branch contains commit(s) that are not present in your local branch.

• Get those commits first by merging, then push your commits.

Page 45: Git session Dropsolid.com

A basic workflow

Git pull

Page 46: Git session Dropsolid.com

A basic workflow

Git push

Page 47: Git session Dropsolid.com

A basic workflow

Git pull

Page 48: Git session Dropsolid.com

A basic workflow

Git pull

Page 49: Git session Dropsolid.com

A basic workflow

Git pull

Page 50: Git session Dropsolid.com

A basic workflow

Git pull

Page 51: Git session Dropsolid.com

A basic workflow

Git pull

Page 52: Git session Dropsolid.com

A basic workflow

Git pull

Page 53: Git session Dropsolid.com

A basic workflow

Fix code manually

Page 54: Git session Dropsolid.com

A basic workflow

Fix conflict UI

Page 55: Git session Dropsolid.com

A basic workflow

Fix conflict UI

Page 56: Git session Dropsolid.com

A basic workflow

Push merged code

Page 57: Git session Dropsolid.com

Git log

Page 58: Git session Dropsolid.com

Git log

- View the latest 10 log messages- $ git log -n 10

Page 59: Git session Dropsolid.com

Git log

- Show nicer log:- $ git log --oneline -n 20

Page 60: Git session Dropsolid.com

Git log

- Search log messages content:$ git log --grep=Breadcrumb

Page 61: Git session Dropsolid.com

Git log

- Search log messages content:$ git log --grep=Breadcrumb

Page 62: Git session Dropsolid.com

Git log

- Search commit content:$ git log -S "Implements hook_views_data" –oneline

Page 63: Git session Dropsolid.com

Git log

- Show commit content:$ git show de25c94

Page 64: Git session Dropsolid.com

Undoing things

Page 65: Git session Dropsolid.com

Git checkout

Page 66: Git session Dropsolid.com

Git checkout

Page 67: Git session Dropsolid.com

Git checkout

• Throw away changes:$ git checkout index.html

• Restores your working tree to the last version committed to git.

• Use git checkout to throw away changes that have not been added and committed.

• Use carefully.

Page 68: Git session Dropsolid.com

Git checkout

Page 69: Git session Dropsolid.com

Git reset

Page 70: Git session Dropsolid.com

Git reset

Page 71: Git session Dropsolid.com

Git reset

• Keep your code changes, remove file from the index:$ git reset HEAD index.html

• Restores your index to the last version known to git.

Page 72: Git session Dropsolid.com

Git reset

Page 73: Git session Dropsolid.com

Git reset --hard

Page 74: Git session Dropsolid.com

Git reset --hard

• Resets working tree and index to a specific commit.

• $ git reset --hard 5497461• Reset a branch to the origin branch:$

git reset --hard origin/master• Use carefully.

Page 75: Git session Dropsolid.com

Git revert

Page 76: Git session Dropsolid.com

Git revert

• Undo a specific commit:$ git revert 5497461

• Creates a new commit that removes the specified commit.

Page 77: Git session Dropsolid.com

Git revert

Page 78: Git session Dropsolid.com

Branching

Page 79: Git session Dropsolid.com

Branching

- List local branches:$ git branch

Page 80: Git session Dropsolid.com

Branching

- List all branches:$ git branch -a

Page 81: Git session Dropsolid.com

Branching

- Create a new branch:$ git branch issue-123

- Switch to that branch:$ git checkout issue-123

- Or create and switch to a branch:$ git checkout -b issue-123

- Push branch to origin:$ git push origin issue-123

Page 82: Git session Dropsolid.com

Branching

- Use a remote branch:$ git checkout -t origin/issue-11699

Page 83: Git session Dropsolid.com

Branching

• Delete a local branch that is fully merged:$ git branch -d branch_name

• Force delete a local branch:$ git branch -D branch_name

• Delete a remote branch:$ git push origin --delete :branch_name

• Completely remove a branch:$ git push origin --delete :branch_name$ git branch -D branch_name

Page 84: Git session Dropsolid.com

Tagging

Page 85: Git session Dropsolid.com

Tagging

• Create tag:$ git tag sporting-beta-1 -a -m 'Sporting beta 1 release.'

• Push tag:$ git push --tags• List tags:$ git tag

Page 86: Git session Dropsolid.com

Tagging

• Move a tag:$ git tag -f sporting-beta-1• Delete a tag:$ git tag -d sporting-beta-

1$ git push origin :sporting-beta-1

Page 87: Git session Dropsolid.com

Patching

Page 88: Git session Dropsolid.com

Patching

• $ git diff > [project_name]-[short_description]-[issue-number]-[comment-number].patch

• Add the patch file to the root of the module you patched.

Page 89: Git session Dropsolid.com

Tips & tricks

Page 90: Git session Dropsolid.com

Git stash

Page 91: Git session Dropsolid.com

Git stash

• Store code changes without committing them.

• Handy when you urgently need to switch branches.

• Stash your code changes:$ git stash• List all available stashes:$ git stash list• Most recent stash is shown on top

Page 92: Git session Dropsolid.com

Git stash

• Apply a stash:$ git stash apply stash@{0}

Page 93: Git session Dropsolid.com

Git stash

Page 94: Git session Dropsolid.com

Git aliases

Page 95: Git session Dropsolid.com

Git bisect

• Shortcuts• Define aliases in .gitconfig file.• Ex: ~/.gitconfig

Page 96: Git session Dropsolid.com

Git aliases

Page 97: Git session Dropsolid.com

Git aliases

Page 98: Git session Dropsolid.com

Git bisect

Page 99: Git session Dropsolid.com

Git bisect

• Find out in when something broke• First, find a commit when everything

was working• Find a commit where things are not

working. • Go to the root of the repository• $ git bisect start$ git bisect good

fd0a623$ git bisect bad 256d85

Page 100: Git session Dropsolid.com

Git bisect

• Refresh the page and see if the bug is there

• $ git bisect good/git bisect bad• Repeat until git tells you the commit

that broke it

Page 101: Git session Dropsolid.com

Resources

Page 102: Git session Dropsolid.com

Resources

• Pro git book: http://git-scm.com/book

• Git bisect tutorial: http://webchick.net/node/99

Page 103: Git session Dropsolid.com

Questions?