Git session Dropsolid.com

Post on 06-May-2015

280 views 0 download

Tags:

description

Git session

Transcript of Git session Dropsolid.com

Git session Hannes Tack

Overview

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

What is git?

What is git?

Open source distributed version control system

Distributed

• Everything is local

– Fast– Every clone is a backup–Work offline

Basic git

Installing Git

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

• Launch the installer• Or Xcode, homebrew, …

Configuring Git

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

‘hannes@dropsolid.com’

Clone a repo

Clone a repo

• Clone an existing repo or create a new one:

– $ git clone user@host:repo

.gitignore

.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

.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

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

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.

A Basic Workflow

A basic workflow

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

A basic workflow

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

A basic workflow

A basic workflow

Git diff

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

A basic workflow

A basic workflow

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

A basic workflow

A basic workflow

A basic workflow

A basic workflow

A basic workflow

Git add

A basic workflow

A basic workflow

A basic workflow

A basic workflow

Staged files• git diff --staged shows the changes

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

file from “staging”

A basic workflow

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

Git commit

A basic workflow

A basic workflow

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.’

A basic workflow

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

Git push

A basic workflow

A basic workflow

A basic workflow

Merging

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.

A basic workflow

Git pull

A basic workflow

Git push

A basic workflow

Git pull

A basic workflow

Git pull

A basic workflow

Git pull

A basic workflow

Git pull

A basic workflow

Git pull

A basic workflow

Git pull

A basic workflow

Fix code manually

A basic workflow

Fix conflict UI

A basic workflow

Fix conflict UI

A basic workflow

Push merged code

Git log

Git log

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

Git log

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

Git log

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

Git log

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

Git log

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

Git log

- Show commit content:$ git show de25c94

Undoing things

Git checkout

Git checkout

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.

Git checkout

Git reset

Git reset

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.

Git reset

Git reset --hard

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.

Git revert

Git revert

• Undo a specific commit:$ git revert 5497461

• Creates a new commit that removes the specified commit.

Git revert

Branching

Branching

- List local branches:$ git branch

Branching

- List all branches:$ git branch -a

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

Branching

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

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

Tagging

Tagging

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

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

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

Patching

Patching

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

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

Tips & tricks

Git stash

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

Git stash

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

Git stash

Git aliases

Git bisect

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

Git aliases

Git aliases

Git bisect

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

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

Resources

Resources

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

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

Questions?