SlideShare una empresa de Scribd logo
1 de 156
Descargar para leer sin conexión
GIT BASICS
LEVEL 1
SAME OLD STORY

es!
Issu
tion
ora
llab
Co
LEVEL 1 — GIT BASICS
VERSION CONTROL SYSTEMS
Merging
Ti

psule
e Ca
m
REPOSITORY LOCATIONS
Central Repository

LEVEL 1 — GIT BASICS

Distributed Repository
Git is a

DISTRIBUTED VERSION CONTROL SYSTEM
(DVCS)
ORIGINS
• Linux Kernel project.
• Meant to be distributed, fast and more natural.
• Capable of handling large projects.

LEVEL 1 — GIT BASICS
WORKING WITH GIT
• Command line interface
• Many GUI tools available
• Official Git Site —
http://git-scm.com/

start here
LEVEL 1 — GIT BASICS
GIT HELP
$ git help
usage: git [--version] [--exec-path[=<path>]] [--html-path]
[-p|--paginate|--no-pager] [--no-replace-objects]
[--bare] [--git-dir=<path>] [--work-tree=<path>]
[-c name=value] [--help]
<command> [<args>]
The most commonly used git commands are:
add
Add file contents to the index
bisect
Find by binary search the change that introduced a bug
...

LEVEL 1 — GIT BASICS
GIT HELP
$ git help config
GIT-CONFIG(1)

Git Manual

GIT-CONFIG(1)

pass in any git command
NAME
git-config - Get and set repository or global options
SYNOPSIS
git config [<file-option>] [type] [-z|--null] name [value [value_regex]]
git config [<file-option>] [type] --add name value
...

LEVEL 1 — GIT BASICS
SETTING UP GIT
$ git config --global user.name "Gregg Pollack"

Who gets credit for changes

$ git config --global user.email gregg@codeschool.com
$ git config --global color.ui true

LEVEL 1 — GIT BASICS

What email you use
Pretty command line colors
STARTING A REPO
$ mkdir store
$ cd store
$ git init
Initialized empty Git repository in /Users/gregg/store/.git/

git metadata is stored here

LEVEL 1 — GIT BASICS
GIT WORK FLOW
Jane creates README.txt file

Starts as untracked
Add file to staging area

Getting ready to take a picture
Commit changes

A snapshot of those on the stage
LEVEL 1 — GIT BASICS
GIT WORK FLOW
Jane creates README.txt file
Add file to staging area
Commit changes
Jane modifies README.txt file & adds LICENSE
Add both files to staging area
Commit changes
LEVEL 1 — GIT BASICS
Jane creates README.txt file
$ git status

To check what’s changed since last commit

# On branch master
#
# Initial commit
#
# Untracked files:
#
(use "git add <file>..." to include in what will be committed)
#
Our newly created file
#
README.txt
nothing added to commit but untracked files present (use "git add" to track)

LEVEL 1 — GIT BASICS
Add file to staging area
$ git add README.txt
$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#
(use "git rm --cached <file>..." to unstage)
#
#
new file:
README.txt
#

Our staged file

LEVEL 1 — GIT BASICS
Commit changes

Commit message
what work was done?

timeline

$ git commit -m "Create a README."
[master abe28da] Create a README.
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 README.txt

master
$ git status
# On branch master
nothing to commit (working directory clean)

No new or modified files since last commit
LEVEL 1 — GIT BASICS
Jane modifies README.txt file & adds LICENSE
$ git status
# On branch master
# Changed but not updated:
#
# modified:
README.txt
#
# Untracked files:
#
# LICENSE
no changes added to commit

LEVEL 1 — GIT BASICS

master
Add both files to staging area
$ git add README.txt LICENSE

OR
$ git add --all

Adds all new or modified files

$ git status
# On branch master
# Changes to be committed:
#
# new file:
LICENSE
# modified:
README.txt
#
LEVEL 1 — GIT BASICS

master
Commit changes
$ git commit -m "Add LICENSE and finish README."
[master 1b0019c] Add LICENSE and finish README.
2 files changed, 21 insertions(+), 0 deletions(-)
create mode 100644 LICENSE

LEVEL 1 — GIT BASICS

master
GIT TIMELINE HISTORY
$ git log
commit 1b0019c37e3f3724fb2e9035e6bab4d7d87bf455
Author: Gregg Pollack <gregg@codeschool.com>
Date:
Thu Jul 5 22:31:27 2012 -0400
Add LICENSE and finish README.
commit 5acaf86b04aaf9cbbb8ebb9042a20a46d0b9ce76
Author: Gregg Pollack <gregg@codeschool.com>
Date:
Thu Jul 5 22:00:46 2012 -0400
Create a README.

LEVEL 1 — GIT BASICS

master
DIFFERENT WAYS TO ADD
$ git add <list of files>

Add the list of files

$ git add --all

Add all files

$ git add *.txt

Add all txt files in current directory

$ git add docs/*.txt
$ git add docs/
$ git add "*.txt"

LEVEL 1 — GIT BASICS

Add all txt files in docs directory
Add all files in docs directory
Add all txt files in the whole project
STAGING & REMOTES
LEVEL 2
GIT DIFF
LICENSE
Copyright (c) 2012 Envy Labs LLC
...
Permission is hereby granted,
free of charge, to any person
obtaining a copy

LICENSE

edit

Copyright (c) 2012 Code School LLC
...
Permission is hereby granted, free
of charge, to any person obtaining
a copy

Show unstaged
$ git diff
diff --git a/LICENSE b/LICENSE
index 7e4922d..442669e 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2012 Envy Labs LLC
+Copyright (c) 2012 Code School LLC

differences since last commit

Line removed
Line added
VIEWING STAGED DIFFERENCES
$ git add LICENSE
$ git diff

No differences, since all changes are staged

$ git diff --staged

View staged differences

diff --git a/LICENSE b/LICENSE
index 7e4922d..442669e 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2012 Envy Labs LLC
+Copyright (c) 2012 Code School LLC

LEVEL 2 — STAGING & REMOTES
UNSTAGING FILES
$
#
#
#
#
#
#
$

Unstage Tip
git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified:

LICENSE

Refers to last commit

git reset HEAD LICENSE

Unstaged changes after reset:
M LICENSE

LEVEL 2 — STAGING & REMOTES

master
HEAD
DISCARD CHANGES
$ git status
# On branch master
# Changed but not updated:
#
(use "git add <file>..." to update what will be committed)
#
(use "git checkout -- <file>..." to discard changes in working directory)
#
# modified:
LICENSE
#

$ git checkout -- LICENSE
$ git status

Blow away all changes
since last commit

nothing to commit (working directory clean)
LEVEL 2 — STAGING & REMOTES
SKIP STAGING AND COMMIT
Readme.txt
here is my readme

Readme.txt

edit

and now I can sleep

here is my readme
the cake is a lie

Add changes from all tracked files
$ git commit -a -m "Modify readme"
[master d00fefc] Modify readme
1 files changed, 1 insertions(+), 1 deletions(-)

Doesn’t add new (untracked) files
LEVEL 2 — STAGING & REMOTES

master
HEAD
UNDOING A COMMIT
Whoops, we forgot something on that commit.

Reset into staging
$ git reset --soft HEAD^
$
#
#
#
#
#
#

git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)

Move to commit before ‘HEAD’

modified:

README.txt

Now I can make changes, and re-commit
LEVEL 2 — STAGING & REMOTES

master
HEAD
ADDING TO A COMMIT
Maybe we forgot to add a file

Add to the last commit
$ git add todo.txt

master

New commit message

$ git commit --amend -m "Modify readme & add todo.txt."
[master fe98ef9] Modify readme and add todo.txt.
2 files changed, 2 insertions(+), 1 deletions(-)
create mode 100644 todo.txt

Whatever has been staged is added to last commit
LEVEL 2 — STAGING & REMOTES

HEAD
USEFUL COMMANDS
$ git reset --soft HEAD^

Undo last commit, put changes into staging

$ git commit --amend -m "New Message"
$ git reset --hard HEAD^

$ git reset --hard HEAD^^

LEVEL 2 — STAGING & REMOTES

Change the last commit

Undo last commit and all changes
Undo last 2 commits and all changes
HOW TO SHARE?
Remote Repository

push
master

pull
pull

“git remote” command
Git doesn’t take care of access control
LEVEL 2 — STAGING & REMOTES
REMOTE REPOSITORY HOSTING
Hosted

Self Managed

• GitHub

• Gitosis

• BitBucket

• Gitorious

push
master
LEVEL 2 — STAGING & REMOTES
LEVEL 2 - STAGING & REMOTES
LEVEL 2 - STAGING & REMOTES
ADDING A REMOTE
$ git remote add origin https://github.com/Gregg/git-real.git

New remote

our name for this remote
show remote repositories

$ git remote -v
origin https://github.com/Gregg/git-real.git (fetch)
origin https://github.com/Gregg/git-real.git (push)

LEVEL 2 — STAGING & REMOTES

address

origin
PU SHING TO R EMOTE
remote repository name

local branch to push

$ git push -u origin master

push

Username for 'https://github.com': Gregg
Password for 'https://Gregg@github.com':
Counting objects: 11, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (11/11), 1.50 KiB, done.
Total 11 (delta 0), reused 0 (delta 0)
To https://github.com/Gregg/git-real.git
* [new branch]
master -> master

Password caching

master

https://help.github.com/articles/set-up-git

origin
LEVEL 2 - STAGING & REMOTES
Same information from “git log”

LEVEL 2 - STAGING & REMOTES
PU LLING FROM REMOTE
To pull changes down from the remote
$ git pull
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 3 (delta 1), reused 3 (delta 1)
It’s
Unpacking objects: 100% (3/3), done.
From https://github.com/Gregg/git-real
fe98ef9..4e67ded master
-> origin/master
Updating fe98ef9..4e67ded
Fast-forward
todo.txt | 1 +
1 file changed, 1 insertion(+)
LEVEL 2 — STAGING & REMOTES

pull
origin

good

often
o this
to d
HAVING MULTIPLE REMOTES

production

origin

test
LEVEL 2 — STAGING & REMOTES
WORKING WITH REMOTES
To add new remotes
$ git remote add <name> <address>

To remove remotes
$ git remote rm <name>

To push to remotes
$ git push -u <name> <branch>

usually master
LEVEL 2 — STAGING & REMOTES
HEROKU REMOTE
git repo ssh address

$ heroku create
Creating dev-server-1426... done, stack is cedar
http://dev-server-1426.herokuapp.com/ | git@heroku.com: dev-server-1426.git
Git remote heroku added
$ git remote -v
heroku git@heroku.com: dev-server-1426.git (fetch)
heroku git@heroku.com: dev-server-1426.git (push)
origin https://github.com/Gregg/git-real.git (fetch)
origin https://github.com/Gregg/git-real.git (push)

To push to heroku
$ git push heroku master
LEVEL 2 — STAGING & REMOTES

triggers deploy
USEFUL COMMANDS
$ git reset --soft HEAD^

Don’t do these after

$ git commit --amend -m "New Message"
$ git reset --hard HEAD^

$ git reset --hard HEAD^^

LEVEL 2 — STAGING & REMOTES

you push
CLONING & BRANCHING
LEVEL 3
COLLABORATING
“I want a copy”
“Clone the repo!”

egg
Gr

Jane
push

local repo

github

How do we start collaborating?
LEVEL 3 — CLONING & BRANCHING

?
FINDING THE REPO URL

URL of the remote repository
LEVEL 3 — CLONING & BRANCHING
FINDING THE REPO URL

URL of the remote repository
LEVEL 3 — CLONING & BRANCHING
CLONING A REPOSITORY
$ git clone https://github.com/codeschool/git-real.git
Cloning into 'git-real'...

URL of the remote repository
$ git clone https://github.com/codeschool/git-real.git git-demo
Cloning into 'git-demo'...

local folder name

LEVEL 3 — CLONING & BRANCHING
GIT CLONE
1 - Downloads the entire repository into a new git-real directory.
2 - Adds the ‘origin’ remote, pointing it to the clone URL.

$ git remote -v
origin
origin

https://github.com/codeschool/git-real.git (fetch)
https://github.com/codeschool/git-real.git (push)

3 - Checks out initial branch (likely master).

sets the head
LEVEL 3 — CLONING & BRANCHING

master
HEAD
BRANCHING OUT
Need to work on a feature that will take some time?
Time to branch out.
$ git branch cat

Jane
cat

branch created from master
HEAD

$ git branch
cat
* master

HEAD still on master
LEVEL 3 — CLONING & BRANCHING

master
SWITCHING TO A BRANCH
Time to jump on that new 'cat' branch.

Jane
cat

$ git checkout cat
Switched to branch 'cat'

HEAD

HEAD is now on ‘cat’
master
LEVEL 3 — CLONING & BRANCHING
WORKING ON A BRANCH
$ echo "Schrödinger" > cat.txt
$ git add cat.txt
$ git commit -m "Create quantum cat."
[cat ab48a3f] Create quantum cat.
1 file changed, 1 insertion(+)
create mode 100644 cat.txt

cat
HEAD

committed to the
“cat” branch
master
LEVEL 3 — CLONING & BRANCHING
WORKING ON A BRANCH
$ ls
README.txt cat.txt

see the cat?

cat
HEAD

master
LEVEL 3 — CLONING & BRANCHING
BACK TO MASTER
$ git checkout master
Switched to branch 'master'
$ ls
README.txt

cat.txt is gone!
and we’re back on master

$ git log
commit 1191ceb7252c9d4b1e05c9969a55766a8adfce3b
Author: Gregg <gregg@codeschool.com>
Date:
Wed Jun 27 23:11:20 2012 -0700
Add README.

nothing in the log either

LEVEL 3 — CLONING & BRANCHING

cat

HEAD

master
BACK TO CAT
$ git checkout cat
Switched to branch 'cat'
$ ls
README.txt cat.txt

cat

phew, still here

HEAD

master
LEVEL 3 — CLONING & BRANCHING
TIME TO MERGE
Done with that feature branch? Time to merge it into 'master '.
$ git checkout master
Switched to branch 'master'
$ ls
README.txt

HEAD

no cat, as expected

$ git merge cat
Updating 1191ceb..ab48a3f
Fast-forward
cat.txt |
1 +
1 file changed, 1 insertion(+)
create mode 100644 cat.txt

what’s that?

merge brings one branch’s changes into another

master
cat
FAST-FORWARD TO THE FUTURE
Conditions for a fast-forward merge

master
HEAD

cat

nothing new

LEVEL 3 — CLONING & BRANCHING

something new
BRANCH CLEAN UP
When you’re done with a branch, you can safely remove it.
$ git branch -d cat
Deleted branch cat (was 957dbff).

LEVEL 3 — CLONING & BRANCHING

master
HEAD

cat
NON-FAST-FORWARD
Let’s work on a new admin feature.

branch
s out
check
es and
creat

$ git checkout -b admin
Switched to a new branch 'admin'
...
$ git add admin/dashboard.html
$ git commit -m 'Add dashboard'
...
$ git add admin/users.html
$ git commit -m 'Add user admin'

“Please fix the bugs on master.”
LEVEL 3 — CLONING & BRANCHING

master
admin
HEAD
BUG FI XING ON MASTER
Time to put out the fire. We’ll get back to that admin branch later.
$ git checkout master
Switched to branch 'master'
$ git branch
admin
* master
$ git pull
...
$ git add store.rb
$ git commit -m 'Fix store bug'
...
$ git add product.rb
$ git commit -m 'Fix product'
...
$ git push

master
admin
HEAD

HEAD
BACK TO OUR BRANCH
$ git checkout admin
Switched to branch 'admin'
...

master
admin

When ready to bring in changes
$ git checkout master
Switched to branch 'admin'
$ git merge admin

LEVEL 3 — CLONING & BRANCHING

HEAD
HEAD
AND SUDDENLY...
Git uses Vi if no default editor is set to edit commit messages.
1
2
3
4
5
6
7

Merge branch 'admin'
#
#
#
#
#

:wq

DON

’T P

ANI

Please enter a commit message to explain why this merge is necessary,
especially if it merges an updated upstream into a topic branch.
Lines starting with '#' will be ignored, and an empty message aborts
the commit.

+ hit Enter to write (save) & quit

Vi commands
j

down

k

up

ESC

leave mode

:wq

save & quit

h

left

l

right

i

insert mode

:q!

cancel & quit

C
RECURSIVE MERGING
Git can’t fast-forward since changes were made in both branches.
Merge made by the 'recursive' strategy.
0 files changed
create mode 100644 admin/dashboard.html
create mode 100644 admin/users.html

master

merge commit

admin

A commit was created to merge the two branches.
$ git log
commit 19f735c3556129279bb10a0d1447dc5aba1e1fa9
Merge: 5c9ed90 7980856
Author: Jane <Jane@CodeSchool.com>
Date:
Thu Jul 12 17:51:53 2012 -0400
Merge branch 'admin'

2 commits

2 commits
COLLABORATION BASICS
LEVEL 4
I want a co
py

github

push

Gregg

?

Jane

Clone the repo
$ git clone https://github.com/codeschool/git-real.git
Start making changes

Jane adds two files
TWO NEW FILES
jane $ git status
# On branch master
# Untracked files:
#
(use "git add <file>..." to include in what will be committed)
#
# product.rb
# store.rb
nothing added to commit but untracked files present
jane $ git add --all
jane $ git commit -m "Add store and product models."
[master 30ce481] Add product and store models.
2 files changed, 2 insertions(+)
create mode 100644 product.rb
create mode 100644 store.rb
COMMIT FLOW
Sends her new commit

jane $ git push
Counting objects: 5, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (4/4), 441 bytes, done.
Total 4 (delta 0), reused 0 (delta 0)
To https://github.com/codeschool/git-real.git
4e67ded..30ce481 master -> master

github

push new commits
master
LEVEL 4 — COLLABORATION BASICS
DIFFERENT GIT COMMITS
gregg $ git commit -am "Update the readme."
[master c715339] Update the readme.
1 file changed, 1 insertion(+), 1 deletion(-)

gregg

different

github

same

LEVEL 4 — COLLABORATION BASICS

ns now?
at happe
Wh
GIT PUSH REJECTED
gregg $ git push

Cannot write over Jane’s commit

To https://github.com/codeschool/git-real.git
! [rejected]
master -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/codeschool/git-real.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

$ git pull
...

$ git push
...

Success!

LEVEL 4 — COLLABORATION BASICS
UNDERSTANDING PULL
$ git pull
1. Fetch (or Sync) our local repository with the remote one
gregg

$ git fetch

github

origin

Fetch doesn’t actually update any of our local code
UNDERSTANDING PULL
$ git pull
1. Fetch (or Sync) our local repository with the remote one
gregg

master

origin/master

$ git fetch

github

master

2. Merges the origin/master with master $ git merge origin/master
MERGE COMMIT
$ git pull
1. Fetch (or Sync) our local repository with the remote one
2. Merges the origin/master with master $ git merge origin/master

Create a new commit for this merge
1
2
3
4
5
6
7

my editor

Merge branch 'master' of https://github.com/codeschool/git-real
#
#
#
#
#

Please enter a commit message to explain why this merge is necessary,
especially if it merges an updated upstream into a topic branch.
Lines starting with '#' will be ignored, and an empty message aborts
the commit.
GIT PUSH REJECTED
$ git pull
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 4 (delta 0), reused 4 (delta 0)
Unpacking objects: 100% (4/4), done.
From https://github.com/codeschool/git-real
4e67ded..30ce481 master
-> origin/master
Merge made by the 'recursive' strategy.
product.rb | 1 +
store.rb
| 1 +
2 files changed, 2 insertions(+)
create mode 100644 product.rb
create mode 100644 store.rb

merge commit
MERGE COMMIT
$ git pull
1. Fetch (or Sync) our local repository with the remote one
2. Merges the origin/master with master

master

merge commit

origin/master

$ git fetch
$ git merge origin/master
PU SHING COMMITS
$ git push
Update origin/master be at the same state as our local repo

origin/master
master

merge commit

github
OUR LOG
gregg $ git log
commit ee47baaedcd54e1957f86bda1aaa1b8a136185da
Merge: 87c5243 57501d5
Author: Gregg Pollack <Gregg@CodeSchool.com>

The problem with pull

Merge branch 'master' of https://github.com/Gregg/git-real
commit 87c5243d2266f05cd9fda8b1c9137f11b3fe6f31
Author: Gregg Pollack <Gregg@CodeSchool.com>
Update the readme.
commit 57501d595b16e2d1198a9c04c547a5b1380a6618
Author: Gregg Pollack <Gregg@CodeSchool.com>
Add store and product models.
MERGE CONFLICTS
README

README

Gregg

here is my readme

committed

different
same

Jane

the cake is telling the truth!

the cake is a lie

gregg

here is my readme

github

committed & pushed
MERGE CONFLICT
gregg $ git pull
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 3 (delta 1), reused 3 (delta 1)
Unpacking objects: 100% (3/3), done.
From https://github.com/Gregg/git-real
ee47baa..4e76d35 master
-> origin/master
Auto-merging README.txt
CONFLICT (content): Merge conflict in README.txt
Automatic merge failed; fix conflicts and then commit the result.

Git modified this file with the diff
LEVEL 4 — COLLABORATION BASICS
MERGE CONFLICT
gregg $ git status
# On branch master
# Your branch and 'origin/master' have diverged,
# and have 1 and 1 different commit each, respectively.
#
# Unmerged paths:
#
(use "git add/rm <file>..." as appropriate to mark resolution)
#
# both modified:
README.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

Need to edit these files

LEVEL 4 — COLLABORATION BASICS
MERGE CONFLICT
README

Edit file and correct

here is my readme

here is my readme

Our local version
the
Jane’s version

<<<<<<< HEAD
the cake is a lie.
=======
the cake is telling the truth!
>>>>>>>
4e76d3542a7eee02ec516a47600002a90a4e4b48
gregg $ git commit -a

Merge commit
LEVEL 4 — COLLABORATION BASICS

cake is a lie.
COMMIT EDITOR
gregg $ git commit -a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

Merge commit

Editor

Merge branch 'master' of https://github.com/Gregg/git-real
Conflicts:
▸ README.txt
#
# It looks like you may be committing a merge.
# If this is not correct, please remove the file
#▸.git/MERGE_HEAD
# and try again.

#
#
#
#
#

Please enter the commit message for your changes. Lines starting
with '#' will be ignored, and an empty message aborts the commit.
On branch master
Your branch and 'origin/master' have diverged,
and have 1 and 1 different commit each, respectively.
MERGE COMMIT
origin/master
master

master
Merge commit

Merge commit

origin/master
$ git push
COLLABORATION BASICS
LEVEL 4
REMOTE BRANCHES & TAGS
LEVEL 5
WHY CREATE A REMOTE BRANCH?
• When you need other people to work on your branch.
• Any branch that will last more than a day.

Gregg

LEVEL 5 — REMOTE BRANCHES AND TAGS
CREATING A REMOTE BRANCH
$ git checkout -b shopping_cart
Switched to a new branch 'shopping_cart'
$ git push origin shopping_cart
Counting objects: 10, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 619 bytes, done.
Total 6 (delta 2), reused 0 (delta 0)
To https://github.com/codeschool/git-real.git
* [new branch]
shopping_cart -> shopping_cart

Links local branch to
the remote branch
(tracking)

LEVEL 5 — REMOTE BRANCHES AND TAGS
PU SHING TO THE BRANCH
$ git add cart.rb
$ git commit -a -m "Add basic cart ability."
[shopping_cart 2a0dbf9] Add basic cart ability
1 file changed, 1 insertion(+)
create mode 100644 cart.rb

Pushed changes from branch

$ git push
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 302 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
To https://github.com/codeschool/git-real.git
786d7a1..2a0dbf9 shopping_cart -> shopping_cart
CREATING A BRANCH
Hey Jane, I star
ted a branch

ck it out
t, I’ll che
Swee

LEVEL 5 — REMOTE BRANCHES AND TAGS
PU LLING NEW BRANCHES
$ git pull
remote: Counting objects: 13, done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 9 (delta 3), reused 8 (delta 2)
Unpacking objects: 100% (9/9), done.
From https://github.com/Gregg/git-real
4e76d35..786d7a1 master
-> origin/master
* [new branch]
shopping_cart -> origin/shopping_cart
Updating 4e76d35..786d7a1
Fast-forward
README.txt | 2 +1 file changed, 1 insertion(+), 1 deletion(-)

LEVEL 5 — REMOTE BRANCHES AND TAGS

remote branch
PU LLING NEW BRANCHES
$ git branch
* master
$ git branch -r
origin/master
origin/shopping_cart

list all remote branches

$ git checkout shopping_cart
Branch shopping_cart set up to track remote branch shopping_cart from origin.
Switched to a new branch 'shopping_cart'

$ git branch
master
* shopping_cart

nd push!
ntribute a
we can co
Now

LEVEL 5 — REMOTE BRANCHES AND TAGS
REMOTE SHOW
$ git remote show origin
* remote origin
Fetch URL: https://github.com/Gregg/git-real.git
Push URL: https://github.com/Gregg/git-real.git
HEAD branch: master
Remote branches:
master
tracked
shopping_cart tracked
Local branches configured for 'git pull':
master
merges with remote master
shopping_cart merges with remote shopping_cart
Local refs configured for 'git push':
master
pushes to master
(up to date)
shopping_cart pushes to shopping_cart (local out of date)
REMOVING A BRANCH
$ git push origin :shopping_cart

Deletes remote branch

To https://github.com/codeschool/git-real.git
- [deleted]
shopping_cart
$ git branch -d shopping_cart

Must delete local branch manua

lly

error: The branch 'shopping_cart' is not fully merged.
If you are sure you want to delete it, run 'git branch -D shopping_cart'.

$ git branch -D shopping_cart
Deleted branch shopping_cart (was ea0a1b9).

LEVEL 5 — REMOTE BRANCHES AND TAGS
WHAT ABOUT GREGG?

Jane

Gregg

LEVEL 5 — REMOTE BRANCHES AND TAGS
ON DELETED REMOTE BRANCH
$ git commit -m -a "Add ability to pay."
[shopping_cart 9851887] Add ability to pay.
1 file changed, 1 insertion(+), 1 deletion(-)
$ git push

No remote to push to (it’s jus

Everything up-to-date

Gregg
t a local branch now)

$ git remote show origin
Remote branches:
master
tracked
refs/remotes/origin/shopping_cart stale (use 'git remote prune' to remove)

$ git remote prune origin

To clean up deleted remote br
anches

Pruning origin
URL: https://github.com/codeschool/git-real.git
* [pruned] origin/shopping_cart
REMOTE BRANCH NAMES
Heroku deploys only master bra

$ git branch
* staging
master
$ git push heroku-staging staging

Would not work, would push to staging

local:remote
$ git push heroku-staging staging:master

Will push and deploy staging on heroku
LEVEL 5 — REMOTE BRANCHES AND TAGS

nc h

heroku-staging
TAGGING
A tag is a reference to a commit (used mostly for release versioning)
$ git tag
v0.0.1
v0.0.2

list all tags

$ git checkout v0.0.1

out code at commit
check
Text

To add a new tag
$ git tag -a v0.0.3 -m "version 0.0.3"

To push new tags
$ git push --tags
LEVEL 5 — REMOTE BRANCHES AND TAGS
REMOTE BRANCHES & TAGS
LEVEL 5
REBASE BELONG TO US
LEVEL 6
MERGE COMMITS ARE BAD
Merge branch 'cats'

origin/master
master

Add Cats.

merge commit

Merge branch 'master' of http...
Update the Readme.
Add product and store models.

M

seless
feel u
mmits
rge co
e

LEVEL 6 — REBASE BELONG TO US
DIFFERENT GIT COMMITS
gregg $ git commit -am "Update the readme."
[master c715339] Update the readme.
1 file changed, 1 insertion(+), 1 deletion(-)

gregg

different

github

same

LEVEL 6 — REBASE BELONG TO US

s commit
Jane’
GIT PUSH REJECTED
gregg $ git push

Cannot write over Jane’s commit

To https://github.com/codeschool/git-real.git
! [rejected]
master -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/codeschool/git-real.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

$ git pull
...

$ git push

ope!
N

...
LEVEL 6 — REBASE BELONG TO US
FETCH
gregg $ git fetch
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 4 (delta 0), reused 4 (delta 0)
Unpacking objects: 100% (4/4), done.
From https://github.com/codeschool/git-real
f35f2f1..71a4650 master
-> origin/master

gregg

github

Syncs
but doesn’t merge

LEVEL 6 — REBASE BELONG TO US

master

origin/master
REBASE
gregg $ git rebase

1. Move all changes to master which are not in origin/master to a temporary area.

temp

master

origin/master

LEVEL 6 — REBASE BELONG TO US
REBASE
gregg $ git rebase

1. Move all changes to master which are not in origin/master to a temporary area.
2. Run all origin/master commits.

temp

master

origin/master

3. Run all commits in the temporary area, one at a time.
LEVEL 6 — REBASE BELONG TO US
REBASE
gregg $ git rebase

1. Move all changes to master which are not in origin/master to a temporary area.
2. Run all origin/master commits.
3. Run all commits in the temporary area, one at a time.

master
Update the Readme.

No M

erge

Add product and store models.

Comm
it!
LOCAL BRANCH REBASE
$ git checkout admin
Switched to branch 'admin'
$ git rebase master
...

master
admin

Rebase

master
admin
I F AL L GOES WELL, MERGE MAS TER
$ git checkout master
Switched to branch 'master'
$ git merge admin
...

master
admin
WHAT ABOUT CONFLICTS
gregg

github

le!
fi
me
sa

Add shopping cart.

ed
dit
E

Add lie to readme.

same

LEVEL 6 — REBASE BELONG TO US

Add truth to readme.

Add product and store models.
FETCH
gregg $ git fetch

master

origin/master

Add shopping cart.

Add truth to readme.

Add lie to readme.

Add product and store models.

LEVEL 6 — REBASE BELONG TO US
REBASE
gregg $ git rebase

1. Move all changes to master which are not in origin/master to a temporary area

origin/master

temp

Add truth to readme.

Add product and store models.

master
REBASE
gregg $ git rebase

2. Run all origin/master commits.

temp

master
Add shopping cart.

Add truth to readme.

Add product and store models.
Add lie to readme.

3. Run all commits in the temporary area, one at a time.
REBASE CONFLICT
gregg $ git rebase
First, rewinding head to replay your work on top of it...
Applying: Add lie to readme.
Using index info to reconstruct a base tree...
M README.txt
<stdin>:13: trailing whitespace.
the cake is a lie, and I am your father!
warning: 1 line adds whitespace errors.
Falling back to patching base and 3-way merge...
Auto-merging README.txt
CONFLICT (content): Merge conflict in README.txt
Failed to merge in the changes.
Patch failed at 0001 Add lie to readme.

master
CONFLICT

When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To check out the original branch and stop rebasing run "git rebase --abort".
REBASE CONFLICT
gregg $ git status
# Not currently on any branch.
# Unmerged paths:
#
(use "git reset HEAD <file>..." to unstage)
#
(use "git add/rm <file>..." as appropriate to mark resolution)
#
# both modified:
README.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

Edit the README.txt
gregg $ git add README.txt
gregg $ git rebase --continue
Applying: Add lie to readme.
Applying: Add shopping cart

gregg $

master
REBASED LOG
master
Add shopping cart.
Add lie to readme.

Add truth to readme.

Add product and store models.
REBASE BELONG TO US
LEVEL 6
HISTORY & CONFIGURATION
LEVEL 7
VIEWING THE LOG
$ git log
commit 915f242e262052b11c511dc07bef237fabb7ed85
SHA
Author: Gregg <gregg@codeschool.com>
Date:
Thu Jun 28 02:10:57 2012 -0700
Update index.
commit message

hash
COLORIZING THE LOG
$ git config --global color.ui true
$ git log
commit 915f242e262052b11c511dc07bef237fabb7ed85
Author: Gregg <gregg@codeschool.com>
Date:
Thu Jun 28 02:10:57 2012 -0700
Update index
$ git log --pretty=oneline
08f202691c67abd12eb886b587ac7b26d51005c7 Update index
LOG FORMAT
$ git log --pretty=format:"%h %ad- %s [%an]"
placeholder

replaced with

%ad

author date

%an

author name

%h

SHA hash

%s

subject

%d

ref names

run “git help log” for more options!
LEVEL 7 — HISTORY & CONFIGURATION

any string you want
& placeholder data
PATCH
$ git log --oneline -p
3ea7f70 I'm telling you, it's 'Octopi'.
diff --git a/index.html b/index.html
index 021a54e..640d66d 100644
--- a/index.html
+++ b/index.html
@@ -8,7 +8,7 @@
<nav>
<ul>
<li><a href="cat.html">Cats</a></li>
<li><a href="octopus.html">Octopuses</a></li>
+
<li><a href="octopi.html">Octopi</a></li>
LEVEL 7 — HISTORY & CONFIGURATION
STATS
$ git log --oneline --stat
3ea7f70 I'm telling you, it's 'Octopi'.
index.html | 2 +1 file changed, 1 insertion(+), 1 deletion(-)
96776a4 Add index.
index.html | 30 +++++++++++++++--------------1 file changed, 15 insertions(+), 15 deletions(-)

LEVEL 7 — HISTORY & CONFIGURATION
GRAPH
$ git log --oneline --graph
*
30b1f8f Merge branch 'bird' into master
|
| * 8b8f950 Revise silly hipster name for bird aisle.
* | 915f242 Add emphasis.
|/
* 69728cd Update index descriptions.

visual representation of the branch merging into master

LEVEL 7 — HISTORY & CONFIGURATION
DATE RANGES
$ git log --until=1.minute.ago

until

$ git log --since=1.day.ago

since (days)

$ git log --since=1.hour.ago

since (hours)

$ git log --since=1.month.ago --until=2.weeks.ago

since & until (relative)

$ git log --since=2000-01-01 --until=2012-12-21

since & until (absolute)
DIFFS
$ git diff
diff --git a/index.html b/index.html
@@ -8,7 +8,10 @@
<nav>
<ul>
<li><a href="cat.html">Cats</a></li>
<li><a href="octopus.html">Octopuses</a></li>
+
<li><a href="birds.html">Birds</a></li>
+
<li><a href="hamsters.html">Hamsters</a></li>
</ul>
</nav>
</body>

removed line

added lines

LEVEL 7 — HISTORY & CONFIGURATION
UNCOMMITTED CHANGES
$ git diff HEAD
diff --git a/index.html b/index.html
index 021a54e..1ceb9d6 100644
diff between last commit
@@ -8,7 +8,10 @@
& current state
<ul>
<li><a href="cat.html">Cats</a></li>
...
diff --git a/octopus.html b/octopus.html
index 55806be..ce8a2c7 100644
@@ -2,6 +2,6 @@
<html lang="en">
...

includes both staged and unstaged files
EARLIER COMMITS
parent of latest commit

$ git diff HEAD^
$ git diff HEAD^^

grandparent of latest commit

$ git diff HEAD~5

five commits ago

$ git diff HEAD^..HEAD

second most recent commit vs. most recent

LEVEL 7 — HISTORY & CONFIGURATION
EARLIER COMMITS
$ git diff f5a6sdfsfsdfsdfff9..4sdsdfsdfsdfsdffb063f

range of SHAs

$ git log --oneline
257256c cat
4fb063f Add index
f5a6ff9 Add catalog pages

$ git diff 4fb063f..f5a6ff9
$ git diff master bird

range of abbreviated SHAs
diff between two branches

$ git diff --since=1.week.ago --until=1.minute.ago

time-based diff
BLAME
$ git blame index.html --date short
...
96776a42 (Gregg 2012-06-29 9) <ul>
96776a42 (Gregg 2012-06-29 10)
<li>Cats</li>
3ea7f709 (Jane
2012-06-30 11)
<li>Octopi</li>
96776a42 (Gregg 2012-06-29 12) </ul>
...

commit hash author

date

line # content

LEVEL 7 — HISTORY & CONFIGURATION
EXCLUDING FILES
$ git status
# Untracked files:
#
(use "git add <file>..." to include in what will be committed)
#
# experiments/
we don’t want to commit this...
.git/info/exclude

experiments/

will exclude this folder from git

$ git status
# On branch master
nothing to commit (working directory clean)

the experiment directory is now invisible to git
EXCLUDE PATTERNS
tutorial.mp4
*.mp4
experiments/
logs/*.log

LEVEL 7 — HISTORY & CONFIGURATION

exclude this file
exclude all .mp4 files
exclude directory
exclude .log files in logs directory
EXCLUDING FROM ALL COPIES
$
#
#
#
#
#

git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
logs/server.log

don’t commit log files, they create conflicts

.gitignore

logs/*.log

add this pattern

$ git status
no more logs
# On branch master
nothing to commit (working directory clean)
REMOVING FILES
$ git rm README.txt
$ git status
# Changes to be committed:
#
# deleted:
README.txt

DELETED from the local filesystem & untracked
$ git commit -m “Remove readme”

LEVEL 7 — HISTORY & CONFIGURATION
UNTRACKING FILES
$ git rm --cached development.log

what if you’re already tracking log files?

$ git status
# Changes to be committed:
#
# deleted:
development.log

not deleted from the local file system, only from Git

LEVEL 7 — HISTORY & CONFIGURATION
UNTRACKING FILES
.gitignore

logs/*.log

will ignore all .log files inside the logs directory

$ git add .gitignore
$ git commit -m "Ignore all log files."
[master bccdc8c] Ignore all log files.
2 files changed, 1 insertion(+), 1 deletion(-)
create mode 100644 .gitignore
delete mode 100644 development.log

LEVEL 7 — HISTORY & CONFIGURATION
CONFIG
$ git config --global user.name "Gregg Pollack"
$ git config --global user.email "gregg@codeschool.com"

remember these? there’s more
$ git config --global core.editor emacs

$ git config --global merge.tool opendiff

LEVEL 7 — HISTORY & CONFIGURATION

use emacs for interactive commands
OS X o
use opendiff for merging conflictsnly
LOCAL CONFIG
$ git config user.email "spamme@example.com" sets email for current repo
$ git config --list
user.name=Gregg
user.email=gregg@codeschool.com
color.ui=true
core.editor=mate -w
user.email=spamme@example.com

same key can
be set twice

$ git config user.email
spamme@example.com

the global config loaded first, then repo config
ALIASES

aliases for log formats

$ git config --global alias.mylog 
"log --pretty=format:'%h %s [%an]' --graph"
$ git config --global alias.lol 
"log --graph --decorate --pretty=oneline --abbrev-commit --all"
$ git mylog
*
19f735c
|
| * 7980856
* | 5c9ed90
|/
*
ab48a3f

Merge branch 'admin' [Jane]
Add user admin [Jane]
Add dashboard. [Jane]
Create quantum cat. [Jane]
ALIASES

git config alias.<name> <command>

$ git config --global alias.st status

git st

git status

$ git config --global alias.co checkout

git co

git checkout

$ git config --global alias.br branch

git br

git branch

$ git config --global alias.ci commit

git ci

git commit

$ git st
# On branch master
nothing to commit (working directory clean)
Git Concepts, Commands and Connectivity

Más contenido relacionado

La actualidad más candente

Intro to Git, GitHub, and Devpost
Intro to Git, GitHub, and DevpostIntro to Git, GitHub, and Devpost
Intro to Git, GitHub, and DevpostAndrew Kerr
 
Git 101: Git and GitHub for Beginners
Git 101: Git and GitHub for Beginners Git 101: Git and GitHub for Beginners
Git 101: Git and GitHub for Beginners HubSpot
 
Teaching a Designer to Use GitHub
Teaching a Designer to Use GitHubTeaching a Designer to Use GitHub
Teaching a Designer to Use GitHubLiam Dempsey
 
GIT | Distributed Version Control System
GIT | Distributed Version Control SystemGIT | Distributed Version Control System
GIT | Distributed Version Control SystemMohammad Imam Hossain
 
Github - Git Training Slides: Foundations
Github - Git Training Slides: FoundationsGithub - Git Training Slides: Foundations
Github - Git Training Slides: FoundationsLee Hanxue
 
Git - Basic Crash Course
Git - Basic Crash CourseGit - Basic Crash Course
Git - Basic Crash CourseNilay Binjola
 
Git basics to advance with diagrams
Git basics to advance with diagramsGit basics to advance with diagrams
Git basics to advance with diagramsDilum Navanjana
 
Intro to git and git hub
Intro to git and git hubIntro to git and git hub
Intro to git and git hubVenkat Malladi
 

La actualidad más candente (20)

Intro to Git, GitHub, and Devpost
Intro to Git, GitHub, and DevpostIntro to Git, GitHub, and Devpost
Intro to Git, GitHub, and Devpost
 
Git 101
Git 101Git 101
Git 101
 
Introduction to git & GitHub
Introduction to git & GitHubIntroduction to git & GitHub
Introduction to git & GitHub
 
Git101
Git101Git101
Git101
 
Git 101 for Beginners
Git 101 for Beginners Git 101 for Beginners
Git 101 for Beginners
 
Git 101: Git and GitHub for Beginners
Git 101: Git and GitHub for Beginners Git 101: Git and GitHub for Beginners
Git 101: Git and GitHub for Beginners
 
Teaching a Designer to Use GitHub
Teaching a Designer to Use GitHubTeaching a Designer to Use GitHub
Teaching a Designer to Use GitHub
 
git and github
git and githubgit and github
git and github
 
GIT | Distributed Version Control System
GIT | Distributed Version Control SystemGIT | Distributed Version Control System
GIT | Distributed Version Control System
 
An Introduction to Git
An Introduction to GitAn Introduction to Git
An Introduction to Git
 
Introduction to Git (part 1)
Introduction to Git (part 1)Introduction to Git (part 1)
Introduction to Git (part 1)
 
GitHub Presentation
GitHub PresentationGitHub Presentation
GitHub Presentation
 
Github - Git Training Slides: Foundations
Github - Git Training Slides: FoundationsGithub - Git Training Slides: Foundations
Github - Git Training Slides: Foundations
 
Git - Basic Crash Course
Git - Basic Crash CourseGit - Basic Crash Course
Git - Basic Crash Course
 
Git training v10
Git training v10Git training v10
Git training v10
 
Github basics
Github basicsGithub basics
Github basics
 
Git basics to advance with diagrams
Git basics to advance with diagramsGit basics to advance with diagrams
Git basics to advance with diagrams
 
Git and Github
Git and GithubGit and Github
Git and Github
 
Intro to git and git hub
Intro to git and git hubIntro to git and git hub
Intro to git and git hub
 
GitHub Basics - Derek Bable
GitHub Basics - Derek BableGitHub Basics - Derek Bable
GitHub Basics - Derek Bable
 

Similar a Git Concepts, Commands and Connectivity

Introducción a git y GitHub
Introducción a git y GitHubIntroducción a git y GitHub
Introducción a git y GitHubLucas Videla
 
Git Basics (Professionals)
 Git Basics (Professionals) Git Basics (Professionals)
Git Basics (Professionals)bryanbibat
 
Git it on (includes git hub)
Git it on (includes git hub)Git it on (includes git hub)
Git it on (includes git hub)Martin Bing
 
Intro to Git DevOps Tally Presentation 101615
Intro to Git DevOps Tally Presentation 101615Intro to Git DevOps Tally Presentation 101615
Intro to Git DevOps Tally Presentation 101615Brian K. Vagnini
 
Learning Basic GIT Cmd
Learning Basic GIT CmdLearning Basic GIT Cmd
Learning Basic GIT Cmdsrinathcox
 
Version Control with Git for Beginners
Version Control with Git for BeginnersVersion Control with Git for Beginners
Version Control with Git for Beginnersbryanbibat
 
The everyday developer's guide to version control with Git
The everyday developer's guide to version control with GitThe everyday developer's guide to version control with Git
The everyday developer's guide to version control with GitE Carter
 

Similar a Git Concepts, Commands and Connectivity (20)

Git_real_slides
Git_real_slidesGit_real_slides
Git_real_slides
 
Git real slides
Git real slidesGit real slides
Git real slides
 
Introducción a git y GitHub
Introducción a git y GitHubIntroducción a git y GitHub
Introducción a git y GitHub
 
Git Basics (Professionals)
 Git Basics (Professionals) Git Basics (Professionals)
Git Basics (Professionals)
 
DrupalCafe5 VCS
DrupalCafe5 VCSDrupalCafe5 VCS
DrupalCafe5 VCS
 
Git it on (includes git hub)
Git it on (includes git hub)Git it on (includes git hub)
Git it on (includes git hub)
 
Gittalk
GittalkGittalk
Gittalk
 
Intro to Git DevOps Tally Presentation 101615
Intro to Git DevOps Tally Presentation 101615Intro to Git DevOps Tally Presentation 101615
Intro to Git DevOps Tally Presentation 101615
 
GIT_In_90_Minutes
GIT_In_90_MinutesGIT_In_90_Minutes
GIT_In_90_Minutes
 
Learning Basic GIT Cmd
Learning Basic GIT CmdLearning Basic GIT Cmd
Learning Basic GIT Cmd
 
Git
GitGit
Git
 
Version Control with Git for Beginners
Version Control with Git for BeginnersVersion Control with Git for Beginners
Version Control with Git for Beginners
 
Git github
Git githubGit github
Git github
 
Git and github introduction
Git and github introductionGit and github introduction
Git and github introduction
 
Git introduction
Git introductionGit introduction
Git introduction
 
The everyday developer's guide to version control with Git
The everyday developer's guide to version control with GitThe everyday developer's guide to version control with Git
The everyday developer's guide to version control with Git
 
git - the basics
git - the basicsgit - the basics
git - the basics
 
Git
GitGit
Git
 
Git basic
Git basicGit basic
Git basic
 
Git basics
Git basicsGit basics
Git basics
 

Más de Raja Soundaramourty

Más de Raja Soundaramourty (11)

Load balancer
Load balancerLoad balancer
Load balancer
 
Continuous Build To Continuous Release - Experience
Continuous Build To Continuous Release - ExperienceContinuous Build To Continuous Release - Experience
Continuous Build To Continuous Release - Experience
 
Try docker
Try dockerTry docker
Try docker
 
Zone of Innovation
Zone of InnovationZone of Innovation
Zone of Innovation
 
Product Ecosystem Of Cloud Native Applications
Product Ecosystem Of Cloud Native ApplicationsProduct Ecosystem Of Cloud Native Applications
Product Ecosystem Of Cloud Native Applications
 
Composing User Stories - Beginners Guide
Composing User Stories - Beginners GuideComposing User Stories - Beginners Guide
Composing User Stories - Beginners Guide
 
Sprint bootstrap 1.0
Sprint bootstrap 1.0Sprint bootstrap 1.0
Sprint bootstrap 1.0
 
Being vs Doing agile
Being vs Doing agileBeing vs Doing agile
Being vs Doing agile
 
Professional Networking overview
Professional Networking overviewProfessional Networking overview
Professional Networking overview
 
Knowledge library
Knowledge libraryKnowledge library
Knowledge library
 
Agile Metrics Driven Management
Agile Metrics Driven ManagementAgile Metrics Driven Management
Agile Metrics Driven Management
 

Último

Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesZilliz
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 

Último (20)

Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector Databases
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 

Git Concepts, Commands and Connectivity

  • 1.
  • 5. REPOSITORY LOCATIONS Central Repository LEVEL 1 — GIT BASICS Distributed Repository
  • 6. Git is a DISTRIBUTED VERSION CONTROL SYSTEM (DVCS)
  • 7. ORIGINS • Linux Kernel project. • Meant to be distributed, fast and more natural. • Capable of handling large projects. LEVEL 1 — GIT BASICS
  • 8. WORKING WITH GIT • Command line interface • Many GUI tools available • Official Git Site — http://git-scm.com/ start here LEVEL 1 — GIT BASICS
  • 9. GIT HELP $ git help usage: git [--version] [--exec-path[=<path>]] [--html-path] [-p|--paginate|--no-pager] [--no-replace-objects] [--bare] [--git-dir=<path>] [--work-tree=<path>] [-c name=value] [--help] <command> [<args>] The most commonly used git commands are: add Add file contents to the index bisect Find by binary search the change that introduced a bug ... LEVEL 1 — GIT BASICS
  • 10. GIT HELP $ git help config GIT-CONFIG(1) Git Manual GIT-CONFIG(1) pass in any git command NAME git-config - Get and set repository or global options SYNOPSIS git config [<file-option>] [type] [-z|--null] name [value [value_regex]] git config [<file-option>] [type] --add name value ... LEVEL 1 — GIT BASICS
  • 11. SETTING UP GIT $ git config --global user.name "Gregg Pollack" Who gets credit for changes $ git config --global user.email gregg@codeschool.com $ git config --global color.ui true LEVEL 1 — GIT BASICS What email you use Pretty command line colors
  • 12. STARTING A REPO $ mkdir store $ cd store $ git init Initialized empty Git repository in /Users/gregg/store/.git/ git metadata is stored here LEVEL 1 — GIT BASICS
  • 13. GIT WORK FLOW Jane creates README.txt file Starts as untracked Add file to staging area Getting ready to take a picture Commit changes A snapshot of those on the stage LEVEL 1 — GIT BASICS
  • 14. GIT WORK FLOW Jane creates README.txt file Add file to staging area Commit changes Jane modifies README.txt file & adds LICENSE Add both files to staging area Commit changes LEVEL 1 — GIT BASICS
  • 15. Jane creates README.txt file $ git status To check what’s changed since last commit # On branch master # # Initial commit # # Untracked files: # (use "git add <file>..." to include in what will be committed) # Our newly created file # README.txt nothing added to commit but untracked files present (use "git add" to track) LEVEL 1 — GIT BASICS
  • 16. Add file to staging area $ git add README.txt $ git status # On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached <file>..." to unstage) # # new file: README.txt # Our staged file LEVEL 1 — GIT BASICS
  • 17. Commit changes Commit message what work was done? timeline $ git commit -m "Create a README." [master abe28da] Create a README. 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 README.txt master $ git status # On branch master nothing to commit (working directory clean) No new or modified files since last commit LEVEL 1 — GIT BASICS
  • 18. Jane modifies README.txt file & adds LICENSE $ git status # On branch master # Changed but not updated: # # modified: README.txt # # Untracked files: # # LICENSE no changes added to commit LEVEL 1 — GIT BASICS master
  • 19. Add both files to staging area $ git add README.txt LICENSE OR $ git add --all Adds all new or modified files $ git status # On branch master # Changes to be committed: # # new file: LICENSE # modified: README.txt # LEVEL 1 — GIT BASICS master
  • 20. Commit changes $ git commit -m "Add LICENSE and finish README." [master 1b0019c] Add LICENSE and finish README. 2 files changed, 21 insertions(+), 0 deletions(-) create mode 100644 LICENSE LEVEL 1 — GIT BASICS master
  • 21. GIT TIMELINE HISTORY $ git log commit 1b0019c37e3f3724fb2e9035e6bab4d7d87bf455 Author: Gregg Pollack <gregg@codeschool.com> Date: Thu Jul 5 22:31:27 2012 -0400 Add LICENSE and finish README. commit 5acaf86b04aaf9cbbb8ebb9042a20a46d0b9ce76 Author: Gregg Pollack <gregg@codeschool.com> Date: Thu Jul 5 22:00:46 2012 -0400 Create a README. LEVEL 1 — GIT BASICS master
  • 22. DIFFERENT WAYS TO ADD $ git add <list of files> Add the list of files $ git add --all Add all files $ git add *.txt Add all txt files in current directory $ git add docs/*.txt $ git add docs/ $ git add "*.txt" LEVEL 1 — GIT BASICS Add all txt files in docs directory Add all files in docs directory Add all txt files in the whole project
  • 23.
  • 24.
  • 26. GIT DIFF LICENSE Copyright (c) 2012 Envy Labs LLC ... Permission is hereby granted, free of charge, to any person obtaining a copy LICENSE edit Copyright (c) 2012 Code School LLC ... Permission is hereby granted, free of charge, to any person obtaining a copy Show unstaged $ git diff diff --git a/LICENSE b/LICENSE index 7e4922d..442669e 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2012 Envy Labs LLC +Copyright (c) 2012 Code School LLC differences since last commit Line removed Line added
  • 27. VIEWING STAGED DIFFERENCES $ git add LICENSE $ git diff No differences, since all changes are staged $ git diff --staged View staged differences diff --git a/LICENSE b/LICENSE index 7e4922d..442669e 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2012 Envy Labs LLC +Copyright (c) 2012 Code School LLC LEVEL 2 — STAGING & REMOTES
  • 28. UNSTAGING FILES $ # # # # # # $ Unstage Tip git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: LICENSE Refers to last commit git reset HEAD LICENSE Unstaged changes after reset: M LICENSE LEVEL 2 — STAGING & REMOTES master HEAD
  • 29. DISCARD CHANGES $ git status # On branch master # Changed but not updated: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: LICENSE # $ git checkout -- LICENSE $ git status Blow away all changes since last commit nothing to commit (working directory clean) LEVEL 2 — STAGING & REMOTES
  • 30. SKIP STAGING AND COMMIT Readme.txt here is my readme Readme.txt edit and now I can sleep here is my readme the cake is a lie Add changes from all tracked files $ git commit -a -m "Modify readme" [master d00fefc] Modify readme 1 files changed, 1 insertions(+), 1 deletions(-) Doesn’t add new (untracked) files LEVEL 2 — STAGING & REMOTES master HEAD
  • 31. UNDOING A COMMIT Whoops, we forgot something on that commit. Reset into staging $ git reset --soft HEAD^ $ # # # # # # git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) Move to commit before ‘HEAD’ modified: README.txt Now I can make changes, and re-commit LEVEL 2 — STAGING & REMOTES master HEAD
  • 32. ADDING TO A COMMIT Maybe we forgot to add a file Add to the last commit $ git add todo.txt master New commit message $ git commit --amend -m "Modify readme & add todo.txt." [master fe98ef9] Modify readme and add todo.txt. 2 files changed, 2 insertions(+), 1 deletions(-) create mode 100644 todo.txt Whatever has been staged is added to last commit LEVEL 2 — STAGING & REMOTES HEAD
  • 33. USEFUL COMMANDS $ git reset --soft HEAD^ Undo last commit, put changes into staging $ git commit --amend -m "New Message" $ git reset --hard HEAD^ $ git reset --hard HEAD^^ LEVEL 2 — STAGING & REMOTES Change the last commit Undo last commit and all changes Undo last 2 commits and all changes
  • 34. HOW TO SHARE? Remote Repository push master pull pull “git remote” command Git doesn’t take care of access control LEVEL 2 — STAGING & REMOTES
  • 35. REMOTE REPOSITORY HOSTING Hosted Self Managed • GitHub • Gitosis • BitBucket • Gitorious push master LEVEL 2 — STAGING & REMOTES
  • 36. LEVEL 2 - STAGING & REMOTES
  • 37. LEVEL 2 - STAGING & REMOTES
  • 38. ADDING A REMOTE $ git remote add origin https://github.com/Gregg/git-real.git New remote our name for this remote show remote repositories $ git remote -v origin https://github.com/Gregg/git-real.git (fetch) origin https://github.com/Gregg/git-real.git (push) LEVEL 2 — STAGING & REMOTES address origin
  • 39. PU SHING TO R EMOTE remote repository name local branch to push $ git push -u origin master push Username for 'https://github.com': Gregg Password for 'https://Gregg@github.com': Counting objects: 11, done. Delta compression using up to 4 threads. Compressing objects: 100% (6/6), done. Writing objects: 100% (11/11), 1.50 KiB, done. Total 11 (delta 0), reused 0 (delta 0) To https://github.com/Gregg/git-real.git * [new branch] master -> master Password caching master https://help.github.com/articles/set-up-git origin
  • 40. LEVEL 2 - STAGING & REMOTES
  • 41. Same information from “git log” LEVEL 2 - STAGING & REMOTES
  • 42. PU LLING FROM REMOTE To pull changes down from the remote $ git pull remote: Counting objects: 5, done. remote: Compressing objects: 100% (1/1), done. remote: Total 3 (delta 1), reused 3 (delta 1) It’s Unpacking objects: 100% (3/3), done. From https://github.com/Gregg/git-real fe98ef9..4e67ded master -> origin/master Updating fe98ef9..4e67ded Fast-forward todo.txt | 1 + 1 file changed, 1 insertion(+) LEVEL 2 — STAGING & REMOTES pull origin good often o this to d
  • 44. WORKING WITH REMOTES To add new remotes $ git remote add <name> <address> To remove remotes $ git remote rm <name> To push to remotes $ git push -u <name> <branch> usually master LEVEL 2 — STAGING & REMOTES
  • 45. HEROKU REMOTE git repo ssh address $ heroku create Creating dev-server-1426... done, stack is cedar http://dev-server-1426.herokuapp.com/ | git@heroku.com: dev-server-1426.git Git remote heroku added $ git remote -v heroku git@heroku.com: dev-server-1426.git (fetch) heroku git@heroku.com: dev-server-1426.git (push) origin https://github.com/Gregg/git-real.git (fetch) origin https://github.com/Gregg/git-real.git (push) To push to heroku $ git push heroku master LEVEL 2 — STAGING & REMOTES triggers deploy
  • 46. USEFUL COMMANDS $ git reset --soft HEAD^ Don’t do these after $ git commit --amend -m "New Message" $ git reset --hard HEAD^ $ git reset --hard HEAD^^ LEVEL 2 — STAGING & REMOTES you push
  • 47.
  • 48.
  • 50. COLLABORATING “I want a copy” “Clone the repo!” egg Gr Jane push local repo github How do we start collaborating? LEVEL 3 — CLONING & BRANCHING ?
  • 51. FINDING THE REPO URL URL of the remote repository LEVEL 3 — CLONING & BRANCHING
  • 52. FINDING THE REPO URL URL of the remote repository LEVEL 3 — CLONING & BRANCHING
  • 53. CLONING A REPOSITORY $ git clone https://github.com/codeschool/git-real.git Cloning into 'git-real'... URL of the remote repository $ git clone https://github.com/codeschool/git-real.git git-demo Cloning into 'git-demo'... local folder name LEVEL 3 — CLONING & BRANCHING
  • 54. GIT CLONE 1 - Downloads the entire repository into a new git-real directory. 2 - Adds the ‘origin’ remote, pointing it to the clone URL. $ git remote -v origin origin https://github.com/codeschool/git-real.git (fetch) https://github.com/codeschool/git-real.git (push) 3 - Checks out initial branch (likely master). sets the head LEVEL 3 — CLONING & BRANCHING master HEAD
  • 55. BRANCHING OUT Need to work on a feature that will take some time? Time to branch out. $ git branch cat Jane cat branch created from master HEAD $ git branch cat * master HEAD still on master LEVEL 3 — CLONING & BRANCHING master
  • 56. SWITCHING TO A BRANCH Time to jump on that new 'cat' branch. Jane cat $ git checkout cat Switched to branch 'cat' HEAD HEAD is now on ‘cat’ master LEVEL 3 — CLONING & BRANCHING
  • 57. WORKING ON A BRANCH $ echo "Schrödinger" > cat.txt $ git add cat.txt $ git commit -m "Create quantum cat." [cat ab48a3f] Create quantum cat. 1 file changed, 1 insertion(+) create mode 100644 cat.txt cat HEAD committed to the “cat” branch master LEVEL 3 — CLONING & BRANCHING
  • 58. WORKING ON A BRANCH $ ls README.txt cat.txt see the cat? cat HEAD master LEVEL 3 — CLONING & BRANCHING
  • 59. BACK TO MASTER $ git checkout master Switched to branch 'master' $ ls README.txt cat.txt is gone! and we’re back on master $ git log commit 1191ceb7252c9d4b1e05c9969a55766a8adfce3b Author: Gregg <gregg@codeschool.com> Date: Wed Jun 27 23:11:20 2012 -0700 Add README. nothing in the log either LEVEL 3 — CLONING & BRANCHING cat HEAD master
  • 60. BACK TO CAT $ git checkout cat Switched to branch 'cat' $ ls README.txt cat.txt cat phew, still here HEAD master LEVEL 3 — CLONING & BRANCHING
  • 61. TIME TO MERGE Done with that feature branch? Time to merge it into 'master '. $ git checkout master Switched to branch 'master' $ ls README.txt HEAD no cat, as expected $ git merge cat Updating 1191ceb..ab48a3f Fast-forward cat.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 cat.txt what’s that? merge brings one branch’s changes into another master cat
  • 62. FAST-FORWARD TO THE FUTURE Conditions for a fast-forward merge master HEAD cat nothing new LEVEL 3 — CLONING & BRANCHING something new
  • 63. BRANCH CLEAN UP When you’re done with a branch, you can safely remove it. $ git branch -d cat Deleted branch cat (was 957dbff). LEVEL 3 — CLONING & BRANCHING master HEAD cat
  • 64. NON-FAST-FORWARD Let’s work on a new admin feature. branch s out check es and creat $ git checkout -b admin Switched to a new branch 'admin' ... $ git add admin/dashboard.html $ git commit -m 'Add dashboard' ... $ git add admin/users.html $ git commit -m 'Add user admin' “Please fix the bugs on master.” LEVEL 3 — CLONING & BRANCHING master admin HEAD
  • 65. BUG FI XING ON MASTER Time to put out the fire. We’ll get back to that admin branch later. $ git checkout master Switched to branch 'master' $ git branch admin * master $ git pull ... $ git add store.rb $ git commit -m 'Fix store bug' ... $ git add product.rb $ git commit -m 'Fix product' ... $ git push master admin HEAD HEAD
  • 66. BACK TO OUR BRANCH $ git checkout admin Switched to branch 'admin' ... master admin When ready to bring in changes $ git checkout master Switched to branch 'admin' $ git merge admin LEVEL 3 — CLONING & BRANCHING HEAD HEAD
  • 67. AND SUDDENLY... Git uses Vi if no default editor is set to edit commit messages. 1 2 3 4 5 6 7 Merge branch 'admin' # # # # # :wq DON ’T P ANI Please enter a commit message to explain why this merge is necessary, especially if it merges an updated upstream into a topic branch. Lines starting with '#' will be ignored, and an empty message aborts the commit. + hit Enter to write (save) & quit Vi commands j down k up ESC leave mode :wq save & quit h left l right i insert mode :q! cancel & quit C
  • 68. RECURSIVE MERGING Git can’t fast-forward since changes were made in both branches. Merge made by the 'recursive' strategy. 0 files changed create mode 100644 admin/dashboard.html create mode 100644 admin/users.html master merge commit admin A commit was created to merge the two branches. $ git log commit 19f735c3556129279bb10a0d1447dc5aba1e1fa9 Merge: 5c9ed90 7980856 Author: Jane <Jane@CodeSchool.com> Date: Thu Jul 12 17:51:53 2012 -0400 Merge branch 'admin' 2 commits 2 commits
  • 69.
  • 70.
  • 72. I want a co py github push Gregg ? Jane Clone the repo $ git clone https://github.com/codeschool/git-real.git Start making changes Jane adds two files
  • 73. TWO NEW FILES jane $ git status # On branch master # Untracked files: # (use "git add <file>..." to include in what will be committed) # # product.rb # store.rb nothing added to commit but untracked files present jane $ git add --all jane $ git commit -m "Add store and product models." [master 30ce481] Add product and store models. 2 files changed, 2 insertions(+) create mode 100644 product.rb create mode 100644 store.rb
  • 74. COMMIT FLOW Sends her new commit jane $ git push Counting objects: 5, done. Compressing objects: 100% (2/2), done. Writing objects: 100% (4/4), 441 bytes, done. Total 4 (delta 0), reused 0 (delta 0) To https://github.com/codeschool/git-real.git 4e67ded..30ce481 master -> master github push new commits master LEVEL 4 — COLLABORATION BASICS
  • 75. DIFFERENT GIT COMMITS gregg $ git commit -am "Update the readme." [master c715339] Update the readme. 1 file changed, 1 insertion(+), 1 deletion(-) gregg different github same LEVEL 4 — COLLABORATION BASICS ns now? at happe Wh
  • 76. GIT PUSH REJECTED gregg $ git push Cannot write over Jane’s commit To https://github.com/codeschool/git-real.git ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to 'https://github.com/codeschool/git-real.git' hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Merge the remote changes (e.g. 'git pull') hint: before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details. $ git pull ... $ git push ... Success! LEVEL 4 — COLLABORATION BASICS
  • 77. UNDERSTANDING PULL $ git pull 1. Fetch (or Sync) our local repository with the remote one gregg $ git fetch github origin Fetch doesn’t actually update any of our local code
  • 78. UNDERSTANDING PULL $ git pull 1. Fetch (or Sync) our local repository with the remote one gregg master origin/master $ git fetch github master 2. Merges the origin/master with master $ git merge origin/master
  • 79. MERGE COMMIT $ git pull 1. Fetch (or Sync) our local repository with the remote one 2. Merges the origin/master with master $ git merge origin/master Create a new commit for this merge 1 2 3 4 5 6 7 my editor Merge branch 'master' of https://github.com/codeschool/git-real # # # # # Please enter a commit message to explain why this merge is necessary, especially if it merges an updated upstream into a topic branch. Lines starting with '#' will be ignored, and an empty message aborts the commit.
  • 80. GIT PUSH REJECTED $ git pull remote: Counting objects: 5, done. remote: Compressing objects: 100% (2/2), done. remote: Total 4 (delta 0), reused 4 (delta 0) Unpacking objects: 100% (4/4), done. From https://github.com/codeschool/git-real 4e67ded..30ce481 master -> origin/master Merge made by the 'recursive' strategy. product.rb | 1 + store.rb | 1 + 2 files changed, 2 insertions(+) create mode 100644 product.rb create mode 100644 store.rb merge commit
  • 81. MERGE COMMIT $ git pull 1. Fetch (or Sync) our local repository with the remote one 2. Merges the origin/master with master master merge commit origin/master $ git fetch $ git merge origin/master
  • 82. PU SHING COMMITS $ git push Update origin/master be at the same state as our local repo origin/master master merge commit github
  • 83. OUR LOG gregg $ git log commit ee47baaedcd54e1957f86bda1aaa1b8a136185da Merge: 87c5243 57501d5 Author: Gregg Pollack <Gregg@CodeSchool.com> The problem with pull Merge branch 'master' of https://github.com/Gregg/git-real commit 87c5243d2266f05cd9fda8b1c9137f11b3fe6f31 Author: Gregg Pollack <Gregg@CodeSchool.com> Update the readme. commit 57501d595b16e2d1198a9c04c547a5b1380a6618 Author: Gregg Pollack <Gregg@CodeSchool.com> Add store and product models.
  • 84. MERGE CONFLICTS README README Gregg here is my readme committed different same Jane the cake is telling the truth! the cake is a lie gregg here is my readme github committed & pushed
  • 85. MERGE CONFLICT gregg $ git pull remote: Counting objects: 5, done. remote: Compressing objects: 100% (1/1), done. remote: Total 3 (delta 1), reused 3 (delta 1) Unpacking objects: 100% (3/3), done. From https://github.com/Gregg/git-real ee47baa..4e76d35 master -> origin/master Auto-merging README.txt CONFLICT (content): Merge conflict in README.txt Automatic merge failed; fix conflicts and then commit the result. Git modified this file with the diff LEVEL 4 — COLLABORATION BASICS
  • 86. MERGE CONFLICT gregg $ git status # On branch master # Your branch and 'origin/master' have diverged, # and have 1 and 1 different commit each, respectively. # # Unmerged paths: # (use "git add/rm <file>..." as appropriate to mark resolution) # # both modified: README.txt # no changes added to commit (use "git add" and/or "git commit -a") Need to edit these files LEVEL 4 — COLLABORATION BASICS
  • 87. MERGE CONFLICT README Edit file and correct here is my readme here is my readme Our local version the Jane’s version <<<<<<< HEAD the cake is a lie. ======= the cake is telling the truth! >>>>>>> 4e76d3542a7eee02ec516a47600002a90a4e4b48 gregg $ git commit -a Merge commit LEVEL 4 — COLLABORATION BASICS cake is a lie.
  • 88. COMMIT EDITOR gregg $ git commit -a 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Merge commit Editor Merge branch 'master' of https://github.com/Gregg/git-real Conflicts: ▸ README.txt # # It looks like you may be committing a merge. # If this is not correct, please remove the file #▸.git/MERGE_HEAD # and try again. # # # # # Please enter the commit message for your changes. Lines starting with '#' will be ignored, and an empty message aborts the commit. On branch master Your branch and 'origin/master' have diverged, and have 1 and 1 different commit each, respectively.
  • 91.
  • 92.
  • 93. REMOTE BRANCHES & TAGS LEVEL 5
  • 94. WHY CREATE A REMOTE BRANCH? • When you need other people to work on your branch. • Any branch that will last more than a day. Gregg LEVEL 5 — REMOTE BRANCHES AND TAGS
  • 95. CREATING A REMOTE BRANCH $ git checkout -b shopping_cart Switched to a new branch 'shopping_cart' $ git push origin shopping_cart Counting objects: 10, done. Delta compression using up to 4 threads. Compressing objects: 100% (6/6), done. Writing objects: 100% (6/6), 619 bytes, done. Total 6 (delta 2), reused 0 (delta 0) To https://github.com/codeschool/git-real.git * [new branch] shopping_cart -> shopping_cart Links local branch to the remote branch (tracking) LEVEL 5 — REMOTE BRANCHES AND TAGS
  • 96. PU SHING TO THE BRANCH $ git add cart.rb $ git commit -a -m "Add basic cart ability." [shopping_cart 2a0dbf9] Add basic cart ability 1 file changed, 1 insertion(+) create mode 100644 cart.rb Pushed changes from branch $ git push Counting objects: 4, done. Delta compression using up to 4 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 302 bytes, done. Total 3 (delta 1), reused 0 (delta 0) To https://github.com/codeschool/git-real.git 786d7a1..2a0dbf9 shopping_cart -> shopping_cart
  • 97.
  • 98.
  • 99. CREATING A BRANCH Hey Jane, I star ted a branch ck it out t, I’ll che Swee LEVEL 5 — REMOTE BRANCHES AND TAGS
  • 100. PU LLING NEW BRANCHES $ git pull remote: Counting objects: 13, done. remote: Compressing objects: 100% (6/6), done. remote: Total 9 (delta 3), reused 8 (delta 2) Unpacking objects: 100% (9/9), done. From https://github.com/Gregg/git-real 4e76d35..786d7a1 master -> origin/master * [new branch] shopping_cart -> origin/shopping_cart Updating 4e76d35..786d7a1 Fast-forward README.txt | 2 +1 file changed, 1 insertion(+), 1 deletion(-) LEVEL 5 — REMOTE BRANCHES AND TAGS remote branch
  • 101. PU LLING NEW BRANCHES $ git branch * master $ git branch -r origin/master origin/shopping_cart list all remote branches $ git checkout shopping_cart Branch shopping_cart set up to track remote branch shopping_cart from origin. Switched to a new branch 'shopping_cart' $ git branch master * shopping_cart nd push! ntribute a we can co Now LEVEL 5 — REMOTE BRANCHES AND TAGS
  • 102. REMOTE SHOW $ git remote show origin * remote origin Fetch URL: https://github.com/Gregg/git-real.git Push URL: https://github.com/Gregg/git-real.git HEAD branch: master Remote branches: master tracked shopping_cart tracked Local branches configured for 'git pull': master merges with remote master shopping_cart merges with remote shopping_cart Local refs configured for 'git push': master pushes to master (up to date) shopping_cart pushes to shopping_cart (local out of date)
  • 103. REMOVING A BRANCH $ git push origin :shopping_cart Deletes remote branch To https://github.com/codeschool/git-real.git - [deleted] shopping_cart $ git branch -d shopping_cart Must delete local branch manua lly error: The branch 'shopping_cart' is not fully merged. If you are sure you want to delete it, run 'git branch -D shopping_cart'. $ git branch -D shopping_cart Deleted branch shopping_cart (was ea0a1b9). LEVEL 5 — REMOTE BRANCHES AND TAGS
  • 104. WHAT ABOUT GREGG? Jane Gregg LEVEL 5 — REMOTE BRANCHES AND TAGS
  • 105. ON DELETED REMOTE BRANCH $ git commit -m -a "Add ability to pay." [shopping_cart 9851887] Add ability to pay. 1 file changed, 1 insertion(+), 1 deletion(-) $ git push No remote to push to (it’s jus Everything up-to-date Gregg t a local branch now) $ git remote show origin Remote branches: master tracked refs/remotes/origin/shopping_cart stale (use 'git remote prune' to remove) $ git remote prune origin To clean up deleted remote br anches Pruning origin URL: https://github.com/codeschool/git-real.git * [pruned] origin/shopping_cart
  • 106. REMOTE BRANCH NAMES Heroku deploys only master bra $ git branch * staging master $ git push heroku-staging staging Would not work, would push to staging local:remote $ git push heroku-staging staging:master Will push and deploy staging on heroku LEVEL 5 — REMOTE BRANCHES AND TAGS nc h heroku-staging
  • 107. TAGGING A tag is a reference to a commit (used mostly for release versioning) $ git tag v0.0.1 v0.0.2 list all tags $ git checkout v0.0.1 out code at commit check Text To add a new tag $ git tag -a v0.0.3 -m "version 0.0.3" To push new tags $ git push --tags LEVEL 5 — REMOTE BRANCHES AND TAGS
  • 108.
  • 109.
  • 110. REMOTE BRANCHES & TAGS LEVEL 5
  • 111.
  • 112.
  • 113. REBASE BELONG TO US LEVEL 6
  • 114. MERGE COMMITS ARE BAD Merge branch 'cats' origin/master master Add Cats. merge commit Merge branch 'master' of http... Update the Readme. Add product and store models. M seless feel u mmits rge co e LEVEL 6 — REBASE BELONG TO US
  • 115. DIFFERENT GIT COMMITS gregg $ git commit -am "Update the readme." [master c715339] Update the readme. 1 file changed, 1 insertion(+), 1 deletion(-) gregg different github same LEVEL 6 — REBASE BELONG TO US s commit Jane’
  • 116. GIT PUSH REJECTED gregg $ git push Cannot write over Jane’s commit To https://github.com/codeschool/git-real.git ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to 'https://github.com/codeschool/git-real.git' hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Merge the remote changes (e.g. 'git pull') hint: before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details. $ git pull ... $ git push ope! N ... LEVEL 6 — REBASE BELONG TO US
  • 117. FETCH gregg $ git fetch remote: Counting objects: 5, done. remote: Compressing objects: 100% (2/2), done. remote: Total 4 (delta 0), reused 4 (delta 0) Unpacking objects: 100% (4/4), done. From https://github.com/codeschool/git-real f35f2f1..71a4650 master -> origin/master gregg github Syncs but doesn’t merge LEVEL 6 — REBASE BELONG TO US master origin/master
  • 118. REBASE gregg $ git rebase 1. Move all changes to master which are not in origin/master to a temporary area. temp master origin/master LEVEL 6 — REBASE BELONG TO US
  • 119. REBASE gregg $ git rebase 1. Move all changes to master which are not in origin/master to a temporary area. 2. Run all origin/master commits. temp master origin/master 3. Run all commits in the temporary area, one at a time. LEVEL 6 — REBASE BELONG TO US
  • 120. REBASE gregg $ git rebase 1. Move all changes to master which are not in origin/master to a temporary area. 2. Run all origin/master commits. 3. Run all commits in the temporary area, one at a time. master Update the Readme. No M erge Add product and store models. Comm it!
  • 121. LOCAL BRANCH REBASE $ git checkout admin Switched to branch 'admin' $ git rebase master ... master admin Rebase master admin
  • 122. I F AL L GOES WELL, MERGE MAS TER $ git checkout master Switched to branch 'master' $ git merge admin ... master admin
  • 123. WHAT ABOUT CONFLICTS gregg github le! fi me sa Add shopping cart. ed dit E Add lie to readme. same LEVEL 6 — REBASE BELONG TO US Add truth to readme. Add product and store models.
  • 124. FETCH gregg $ git fetch master origin/master Add shopping cart. Add truth to readme. Add lie to readme. Add product and store models. LEVEL 6 — REBASE BELONG TO US
  • 125. REBASE gregg $ git rebase 1. Move all changes to master which are not in origin/master to a temporary area origin/master temp Add truth to readme. Add product and store models. master
  • 126. REBASE gregg $ git rebase 2. Run all origin/master commits. temp master Add shopping cart. Add truth to readme. Add product and store models. Add lie to readme. 3. Run all commits in the temporary area, one at a time.
  • 127. REBASE CONFLICT gregg $ git rebase First, rewinding head to replay your work on top of it... Applying: Add lie to readme. Using index info to reconstruct a base tree... M README.txt <stdin>:13: trailing whitespace. the cake is a lie, and I am your father! warning: 1 line adds whitespace errors. Falling back to patching base and 3-way merge... Auto-merging README.txt CONFLICT (content): Merge conflict in README.txt Failed to merge in the changes. Patch failed at 0001 Add lie to readme. master CONFLICT When you have resolved this problem run "git rebase --continue". If you would prefer to skip this patch, instead run "git rebase --skip". To check out the original branch and stop rebasing run "git rebase --abort".
  • 128. REBASE CONFLICT gregg $ git status # Not currently on any branch. # Unmerged paths: # (use "git reset HEAD <file>..." to unstage) # (use "git add/rm <file>..." as appropriate to mark resolution) # # both modified: README.txt # no changes added to commit (use "git add" and/or "git commit -a") Edit the README.txt gregg $ git add README.txt gregg $ git rebase --continue Applying: Add lie to readme. Applying: Add shopping cart gregg $ master
  • 129. REBASED LOG master Add shopping cart. Add lie to readme. Add truth to readme. Add product and store models.
  • 130. REBASE BELONG TO US LEVEL 6
  • 131.
  • 132.
  • 134. VIEWING THE LOG $ git log commit 915f242e262052b11c511dc07bef237fabb7ed85 SHA Author: Gregg <gregg@codeschool.com> Date: Thu Jun 28 02:10:57 2012 -0700 Update index. commit message hash
  • 135. COLORIZING THE LOG $ git config --global color.ui true $ git log commit 915f242e262052b11c511dc07bef237fabb7ed85 Author: Gregg <gregg@codeschool.com> Date: Thu Jun 28 02:10:57 2012 -0700 Update index $ git log --pretty=oneline 08f202691c67abd12eb886b587ac7b26d51005c7 Update index
  • 136. LOG FORMAT $ git log --pretty=format:"%h %ad- %s [%an]" placeholder replaced with %ad author date %an author name %h SHA hash %s subject %d ref names run “git help log” for more options! LEVEL 7 — HISTORY & CONFIGURATION any string you want & placeholder data
  • 137. PATCH $ git log --oneline -p 3ea7f70 I'm telling you, it's 'Octopi'. diff --git a/index.html b/index.html index 021a54e..640d66d 100644 --- a/index.html +++ b/index.html @@ -8,7 +8,7 @@ <nav> <ul> <li><a href="cat.html">Cats</a></li> <li><a href="octopus.html">Octopuses</a></li> + <li><a href="octopi.html">Octopi</a></li> LEVEL 7 — HISTORY & CONFIGURATION
  • 138. STATS $ git log --oneline --stat 3ea7f70 I'm telling you, it's 'Octopi'. index.html | 2 +1 file changed, 1 insertion(+), 1 deletion(-) 96776a4 Add index. index.html | 30 +++++++++++++++--------------1 file changed, 15 insertions(+), 15 deletions(-) LEVEL 7 — HISTORY & CONFIGURATION
  • 139. GRAPH $ git log --oneline --graph * 30b1f8f Merge branch 'bird' into master | | * 8b8f950 Revise silly hipster name for bird aisle. * | 915f242 Add emphasis. |/ * 69728cd Update index descriptions. visual representation of the branch merging into master LEVEL 7 — HISTORY & CONFIGURATION
  • 140. DATE RANGES $ git log --until=1.minute.ago until $ git log --since=1.day.ago since (days) $ git log --since=1.hour.ago since (hours) $ git log --since=1.month.ago --until=2.weeks.ago since & until (relative) $ git log --since=2000-01-01 --until=2012-12-21 since & until (absolute)
  • 141. DIFFS $ git diff diff --git a/index.html b/index.html @@ -8,7 +8,10 @@ <nav> <ul> <li><a href="cat.html">Cats</a></li> <li><a href="octopus.html">Octopuses</a></li> + <li><a href="birds.html">Birds</a></li> + <li><a href="hamsters.html">Hamsters</a></li> </ul> </nav> </body> removed line added lines LEVEL 7 — HISTORY & CONFIGURATION
  • 142. UNCOMMITTED CHANGES $ git diff HEAD diff --git a/index.html b/index.html index 021a54e..1ceb9d6 100644 diff between last commit @@ -8,7 +8,10 @@ & current state <ul> <li><a href="cat.html">Cats</a></li> ... diff --git a/octopus.html b/octopus.html index 55806be..ce8a2c7 100644 @@ -2,6 +2,6 @@ <html lang="en"> ... includes both staged and unstaged files
  • 143. EARLIER COMMITS parent of latest commit $ git diff HEAD^ $ git diff HEAD^^ grandparent of latest commit $ git diff HEAD~5 five commits ago $ git diff HEAD^..HEAD second most recent commit vs. most recent LEVEL 7 — HISTORY & CONFIGURATION
  • 144. EARLIER COMMITS $ git diff f5a6sdfsfsdfsdfff9..4sdsdfsdfsdfsdffb063f range of SHAs $ git log --oneline 257256c cat 4fb063f Add index f5a6ff9 Add catalog pages $ git diff 4fb063f..f5a6ff9 $ git diff master bird range of abbreviated SHAs diff between two branches $ git diff --since=1.week.ago --until=1.minute.ago time-based diff
  • 145. BLAME $ git blame index.html --date short ... 96776a42 (Gregg 2012-06-29 9) <ul> 96776a42 (Gregg 2012-06-29 10) <li>Cats</li> 3ea7f709 (Jane 2012-06-30 11) <li>Octopi</li> 96776a42 (Gregg 2012-06-29 12) </ul> ... commit hash author date line # content LEVEL 7 — HISTORY & CONFIGURATION
  • 146. EXCLUDING FILES $ git status # Untracked files: # (use "git add <file>..." to include in what will be committed) # # experiments/ we don’t want to commit this... .git/info/exclude experiments/ will exclude this folder from git $ git status # On branch master nothing to commit (working directory clean) the experiment directory is now invisible to git
  • 147. EXCLUDE PATTERNS tutorial.mp4 *.mp4 experiments/ logs/*.log LEVEL 7 — HISTORY & CONFIGURATION exclude this file exclude all .mp4 files exclude directory exclude .log files in logs directory
  • 148. EXCLUDING FROM ALL COPIES $ # # # # # git status On branch master Untracked files: (use "git add <file>..." to include in what will be committed) logs/server.log don’t commit log files, they create conflicts .gitignore logs/*.log add this pattern $ git status no more logs # On branch master nothing to commit (working directory clean)
  • 149. REMOVING FILES $ git rm README.txt $ git status # Changes to be committed: # # deleted: README.txt DELETED from the local filesystem & untracked $ git commit -m “Remove readme” LEVEL 7 — HISTORY & CONFIGURATION
  • 150. UNTRACKING FILES $ git rm --cached development.log what if you’re already tracking log files? $ git status # Changes to be committed: # # deleted: development.log not deleted from the local file system, only from Git LEVEL 7 — HISTORY & CONFIGURATION
  • 151. UNTRACKING FILES .gitignore logs/*.log will ignore all .log files inside the logs directory $ git add .gitignore $ git commit -m "Ignore all log files." [master bccdc8c] Ignore all log files. 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 .gitignore delete mode 100644 development.log LEVEL 7 — HISTORY & CONFIGURATION
  • 152. CONFIG $ git config --global user.name "Gregg Pollack" $ git config --global user.email "gregg@codeschool.com" remember these? there’s more $ git config --global core.editor emacs $ git config --global merge.tool opendiff LEVEL 7 — HISTORY & CONFIGURATION use emacs for interactive commands OS X o use opendiff for merging conflictsnly
  • 153. LOCAL CONFIG $ git config user.email "spamme@example.com" sets email for current repo $ git config --list user.name=Gregg user.email=gregg@codeschool.com color.ui=true core.editor=mate -w user.email=spamme@example.com same key can be set twice $ git config user.email spamme@example.com the global config loaded first, then repo config
  • 154. ALIASES aliases for log formats $ git config --global alias.mylog "log --pretty=format:'%h %s [%an]' --graph" $ git config --global alias.lol "log --graph --decorate --pretty=oneline --abbrev-commit --all" $ git mylog * 19f735c | | * 7980856 * | 5c9ed90 |/ * ab48a3f Merge branch 'admin' [Jane] Add user admin [Jane] Add dashboard. [Jane] Create quantum cat. [Jane]
  • 155. ALIASES git config alias.<name> <command> $ git config --global alias.st status git st git status $ git config --global alias.co checkout git co git checkout $ git config --global alias.br branch git br git branch $ git config --global alias.ci commit git ci git commit $ git st # On branch master nothing to commit (working directory clean)