INTRODUCTION TO GIT
DAVID PARSONS
INTRODUCTION TO GIT DAVID PARSONS 1 Source Code Management Tools - - PowerPoint PPT Presentation
INTRODUCTION TO GIT DAVID PARSONS 1 Source Code Management Tools DAVID PARSONS - INTRODUCTION TO GIT DAVID PARSONS - INTRODUCTION TO GIT 2 Source code managers (scm) a.k.a. version control systems (vcs) Allow for the complete
DAVID PARSONS
DAVID PARSONS - INTRODUCTION TO GIT 2 DAVID PARSONS - INTRODUCTION TO GIT
DAVID PARSONS - INTRODUCTION TO GIT 3
DAVID PARSONS - INTRODUCTION TO GIT 4
DAVID PARSONS - INTRODUCTION TO GIT 5
DAVID PARSONS - INTRODUCTION TO GIT 6
DAVID PARSONS - INTRODUCTION TO GIT 7
A1 B C A2 B1 C A B C Rev 1 Rev 2 Rev 3
DAVID PARSONS - INTRODUCTION TO GIT 8
Short (50 chars or less) summary of changes More detailed explanatory text, if necessary. Wrap it to about 72 characters or so. In some contexts, the first line is treated as the subject of an email and the rest of the text as the body. The blank line separa=ng the summary from the body is cri=cal (unless you omit the body en=rely).
DAVID PARSONS - INTRODUCTION TO GIT 9 DAVID PARSONS - INTRODUCTION TO GIT
DAVID PARSONS - INTRODUCTION TO GIT 10
DAVID PARSONS - INTRODUCTION TO GIT 11
DAVID PARSONS - INTRODUCTION TO GIT 12
DAVID PARSONS - INTRODUCTION TO GIT 13
DAVID PARSONS - INTRODUCTION TO GIT 14
DAVID PARSONS - INTRODUCTION TO GIT 15
Local Repo
Working Copy Staging Area CommiUed Revisions Remote Repo CommiUed Revisions
DAVID PARSONS - INTRODUCTION TO GIT 16
DAVID PARSONS - INTRODUCTION TO GIT 17
DAVID PARSONS - INTRODUCTION TO GIT 18 DAVID PARSONS - INTRODUCTION TO GIT
DAVID PARSONS - INTRODUCTION TO GIT 19
DAVID PARSONS - INTRODUCTION TO GIT 20
DAVID PARSONS - INTRODUCTION TO GIT 21 DAVID PARSONS - INTRODUCTION TO GIT
DAVID PARSONS - INTRODUCTION TO GIT 22
$ ls foo bar $ git status On branch master nothing to commit, working directory clean $ Log rev 1 Log rev 2 Log rev 3 master
DAVID PARSONS - INTRODUCTION TO GIT 23
$ ls foo bar $ git status On branch master nothing to commit, working directory clean $ $ # Create a new file baz $ echo "A new file…" > baz $ $ git status On branch master Untracked files: (use "git add <file>…" to include in what will be committed baz nothing added to commit but untracked files present (use "git add" to track) $ Log rev 1 Log rev 2 Log rev 3 master
DAVID PARSONS - INTRODUCTION TO GIT 24
$ git add baz Log rev 1 Log rev 2 Log rev 3 master
DAVID PARSONS - INTRODUCTION TO GIT 25
$ git add baz $ git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: baz $ Log rev 1 Log rev 2 Log rev 3 Modifs in index master
DAVID PARSONS - INTRODUCTION TO GIT 26
$ git add baz $ git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: baz $ git commit Log rev 1 Log rev 2 Log rev 3 Modifs in index master
DAVID PARSONS - INTRODUCTION TO GIT 27
$ git add baz $ git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: baz $ git commit [master 98aa7ff] Add file baz 1 file changed, 1 insertion(+) create mode 100644 baz $ git status On branch master nothing to commit, working directory clean $ Log rev 1 Log rev 2 Log rev 3 Add file baz master
DAVID PARSONS - INTRODUCTION TO GIT 28
$ git log commit 579001a8a6f83cb6547440ba319f7210916ece6b Author: David Parsons <david.parsons@inria.fr> Date: Sat Jan 9 17:53:11 2016 +0100 Add file baz commit e82a7786b5ebfc1d0e62eb00ae2101a328d3f0e4 Author: David Parsons <david.parsons@inria.fr> Date: Sat Jan 9 17:44:29 2016 +0100 Log rev3 commit f6813a3b9f081bb486975dfe5b6a426effabf61c Author: David Parsons <david.parsons@inria.fr> Date: Sat Jan 9 17:43:39 2016 +0100 Log rev2 commit f667b6e8847d20c67968c2b2d8a85fac7076251f : Log rev 1 Log rev 2 Log rev 3 Add file baz master
DAVID PARSONS - INTRODUCTION TO GIT 29
$ git log --pretty=oneline 579001a8a6f83cb6547440ba319f7[…] Add file baz e82a7786b5ebfc1d0e62eb00ae210[…] Log rev3 f6813a3b9f081bb486975dfe5b6a4[…] Log rev2 f667b6e8847d20c67968c2b2d8a85[…] Log rev1 $ $ git log --pretty=format:"%h - %an : %s" 579001a - David Parsons : Add file baz e82a778 - David Parsons : Log rev3 f6813a3 - David Parsons : Log rev2 f667b6e - David Parsons : Log rev1 $ Log rev 1 Log rev 2 Log rev 3 Add file baz master
DAVID PARSONS - INTRODUCTION TO GIT 30
$ # Add content to foo $ echo "Added content" >> foo Log rev 1 Log rev 2 Log rev 3 Add file baz master
DAVID PARSONS - INTRODUCTION TO GIT 31
$ # Add content to foo $ echo "Added content" >> foo $ Log rev 1 Log rev 2 Log rev 3 Add file baz Modifs not in index master
DAVID PARSONS - INTRODUCTION TO GIT 32
$ # Add content to foo $ echo "Added content" >> foo $ $ git status On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: foo no changes added to commit (use "git add" and/
$ Log rev 1 Log rev 2 Log rev 3 Add file baz Modifs not in index master
DAVID PARSONS - INTRODUCTION TO GIT 33
$ # Mark changes in foo as ‘to be committed’ $ git stage foo Log rev 1 Log rev 2 Log rev 3 Add file baz Modifs not in index master
DAVID PARSONS - INTRODUCTION TO GIT 34
$ # Mark changes in foo as ‘to be committed’ $ git stage foo $ $ # The exact same thing could have been done with git add foo $ $ git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: foo $ Log rev 1 Log rev 2 Log rev 3 Add file baz Modifs in index master
DAVID PARSONS - INTRODUCTION TO GIT 35
$ # Add content to bar $ echo "Content added to bar" >> bar Log rev 1 Log rev 2 Log rev 3 Add file baz Modifs in index master
DAVID PARSONS - INTRODUCTION TO GIT 36
$ # Add content to bar $ echo "Content added to bar" >> bar $ Log rev 1 Log rev 2 Log rev 3 Add file baz Modifs in index Modifs not in index master
DAVID PARSONS - INTRODUCTION TO GIT 37
$ # Add content to bar $ echo "Content added to bar" >> bar $ git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: foo Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: bar $ Log rev 1 Log rev 2 Log rev 3 Add file baz Modifs in index Modifs not in index master
DAVID PARSONS - INTRODUCTION TO GIT 38
Log rev 1 Log rev 2 Log rev 3 Add file baz Modifs in index Modifs not in index
git diff git diff --staged git diff HEAD
master
DAVID PARSONS - INTRODUCTION TO GIT 39
$ git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: foo Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: bar $ Log rev 1 Log rev 2 Log rev 3 Add file baz Modifs in index Modifs not in index master
DAVID PARSONS - INTRODUCTION TO GIT 40
$ git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: foo Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: bar $ # Add more content to foo $ echo “more content” >> foo Log rev 1 Log rev 2 Log rev 3 Add file baz Modifs in index Modifs not in index master
DAVID PARSONS - INTRODUCTION TO GIT 41
$ git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: foo Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: bar modified: foo $ Log rev 1 Log rev 2 Log rev 3 Add file baz Modifs in index Modifs not in index master
DAVID PARSONS - INTRODUCTION TO GIT 42
$ # Commit working copy state of foo $ git commit foo Log rev 1 Log rev 2 Log rev 3 Add file baz Modifs in index Modifs not in index master
DAVID PARSONS - INTRODUCTION TO GIT 43
$ # Commit working copy state of foo $ git commit foo [master 5e60acc] Add content to foo 1 file changed, 2 insertions(+) $ Log rev 1 Log rev 2 Log rev 3 Add content to foo Modifs not in index Add file baz master
DAVID PARSONS - INTRODUCTION TO GIT 44
$ # Commit working copy state of foo $ git commit foo [master 5e60acc] Add content to foo 1 file changed, 2 insertions(+) $ $ git status On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: bar $ Log rev 1 Log rev 2 Log rev 3 Add content to foo Modifs not in index Add file baz master
DAVID PARSONS - INTRODUCTION TO GIT 45
$ # Commit working copy state of all tracked files $ git commit -a -m "Add content to bar” Log rev 1 Log rev 2 Log rev 3 Add content to foo Modifs not in index Add file baz master
DAVID PARSONS - INTRODUCTION TO GIT 46
$ # Commit working copy state of all tracked files $ git commit -a -m "Add content to bar" [master 119dfba] Add content to bar 1 file changed, 1 insertion(+) $ git status On branch master nothing to commit, working directory clean $ Log rev 1 Log rev 2 Log rev 3 Add content to foo Add file baz Add content to bar master
DAVID PARSONS - INTRODUCTION TO GIT 47
# Configure your name and e-mail address (almost mandatory) # If you don’t, you’ll get: $ git commit *** Please tell me who you are. Run git config --global user.email "you@example.com" git config --global user.name "Your Name" to set your account's default identity. Omit --global to set the identity only in this repository. # Configure your name and e-mail address $ git config --global user.name "David Parsons" $ git config --global user.email david.parsons@inria.fr
DAVID PARSONS - INTRODUCTION TO GIT 48
$ # Configure the editor git will open when needed $ git config --global core.editor nano $ $ # Setup a few aliases, either simple shorthands... $ git config --global alias.co checkout $ git config --global alias.ci commit $ git config --global alias.s status $ $ # ... or including options $ git config --global alias.lg "log --pretty=format:\"%h - %an : %s\"" $ $ # You can even create new commands $ git config --global alias.unstage "reset HEAD”
DAVID PARSONS - INTRODUCTION TO GIT 49 DAVID PARSONS - INTRODUCTION TO GIT
DAVID PARSONS - INTRODUCTION TO GIT 50
clone clone
master
Central repo
DAVID PARSONS - INTRODUCTION TO GIT 51
master r/o/master
master master r/o/master
Central repo
DAVID PARSONS - INTRODUCTION TO GIT 52
master master master r/o/master r/o/master
Central repo
DAVID PARSONS - INTRODUCTION TO GIT 53
master master master
push
r/o/master
Central repo
r/o/master
DAVID PARSONS - INTRODUCTION TO GIT 54
master master master r/o/master r/o/master
Central repo
DAVID PARSONS - INTRODUCTION TO GIT 55
master master master r/o/master
push
r/o/master
Central repo
DAVID PARSONS - INTRODUCTION TO GIT 56
master master master r/o/master
push
r/o/master
Central repo
DAVID PARSONS - INTRODUCTION TO GIT 57
master master master r/o/master
fetch
r/o/master
Central repo
DAVID PARSONS - INTRODUCTION TO GIT 58
master master master r/o/master r/o/master
Central repo
DAVID PARSONS - INTRODUCTION TO GIT 59
master master r/o/master master r/o/master
Central repo
DAVID PARSONS - INTRODUCTION TO GIT 60
master master r/o/master master
push
r/o/master
Central repo
DAVID PARSONS - INTRODUCTION TO GIT 61
master r/o/master master master r/o/master
Central repo
DAVID PARSONS - INTRODUCTION TO GIT 62
master r/o/master master master
pull
r/o/master
Central repo
DAVID PARSONS - INTRODUCTION TO GIT 63
master master r/o/master master r/o/master
Central repo
DAVID PARSONS - INTRODUCTION TO GIT 64 DAVID PARSONS - INTRODUCTION TO GIT
DAVID PARSONS - INTRODUCTION TO GIT 65
$ # Clone a remote repository $ # git clone <remote-repo-url> [local-name] $
DAVID PARSONS - INTRODUCTION TO GIT 66
$ # Clone a remote repository $ # git clone <remote-repo-url> [local-name] $ git clone […]/collab.git Cloning into ‘collab'... done. $
DAVID PARSONS - INTRODUCTION TO GIT 67
$ # Clone a remote repository $ # git clone <remote-repo-url> [local-name] $ git clone […]/collab.git Cloning into ‘collab'... done. $ cd collab # Don’t forget to cd into the local repo dir $ Add content to foo Add file baz master Add content to bar v0.1 remotes/origin/master
DAVID PARSONS - INTRODUCTION TO GIT 68
$ git clone […]/collab.git Cloning into ‘collab'... done. $ cd collab # Don’t forget to cd into the local repo dir $
Add content to foo Add file baz master Add content to bar v0.1 remotes/origin/master
DAVID PARSONS - INTRODUCTION TO GIT 69
$ # Clone a remote repository $ # git clone <remote-repo-url> [local-name] $ git clone […]/collab.git Cloning into ‘collab'... done. $ cd collab # Don’t forget to cd into the local repo dir $ git remote
$ git remote –v
[…]/collab.git (fetch)
[…]/collab.git (push) $ Add content to foo Add file baz master Add content to bar v0.1 remotes/origin/master
DAVID PARSONS - INTRODUCTION TO GIT 70
Add content to foo Add file baz master Add content to bar v0.1 remotes/origin/master $ # Commit stuff $ echo "This is the content of bar" > bar $ Modifs not in index
DAVID PARSONS - INTRODUCTION TO GIT 71
$ # Commit stuff $ echo "This is the content of bar" > bar $ git commit bar -m "Modify bar" $ Add content to bar remotes/origin/master master Modify bar Add content to foo Add file baz v0.1
DAVID PARSONS - INTRODUCTION TO GIT 72
$ # Push your commits onto the remote repository $ git push Add content to bar remotes/origin/master master Modify bar Add content to foo Add file baz v0.1
DAVID PARSONS - INTRODUCTION TO GIT 73
$ # Push your commits onto the remote repository $ git push Counting objects: 3, done. Delta compression using up to 4 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 318 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To […]/collab.git 119dfba..a8f9783 master -> master $ Add content to bar master Modify bar remotes/origin/master Add content to foo Add file baz v0.1
DAVID PARSONS - INTRODUCTION TO GIT 74
$
Add content to foo Add file baz master Add content to bar v0.1 remotes/origin/master
DAVID PARSONS - INTRODUCTION TO GIT 75
$ # Commit stuff $ echo "This is foo’s new content" > foo $ git commit foo -m "Change foo" $ Add content to bar remotes/origin/master master Change foo
Add content to foo Add file baz v0.1
DAVID PARSONS - INTRODUCTION TO GIT 76
$ git push To […]/collab.git ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to ‘[…]/collab.git’ hint: Updates were rejected because the remote contains work that you hint: do not have locally. This is usually caused by another hint: repository pushing to the same ref. You may want to first hint: integrate the remote changes (e.g., 'git pull ...') before hint: pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details. $
Add content to bar remotes/origin/master master Change foo Add content to foo Add file baz v0.1
DAVID PARSONS - INTRODUCTION TO GIT 77
$ git fetch
Add content to bar remotes/origin/master master Change foo Add content to foo Add file baz v0.1
DAVID PARSONS - INTRODUCTION TO GIT 78
$ git fetch From […]/collab.git 119dfba..a8f9783 master -> origin/master $ Add content to bar v0.1 Modify bar Change foo master remotes/origin/master
Add content to foo Add file baz
DAVID PARSONS - INTRODUCTION TO GIT 79
$ git merge
Add content to bar v0.1 Modify bar Change foo master remotes/origin/master Add content to foo Add file baz
Merging consists in injec=ng the accumulated changeset of r/o/master into master A merge is embodied by a merge commit that has two parents and that includes the changes from both sides The branch being merged is untouched
DAVID PARSONS - INTRODUCTION TO GIT 80
$ git merge Merge made by the 'recursive' strategy. bar | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 bar $ Change foo Modify bar Merge remote-tracking branch 'origin/master' master remotes/origin/master
Add content to bar v0.1 Add content to foo Add file baz
When there are no conflicts between the two changesets, git merge automa=cally triggers the crea=on of the merge commit. It will open your core editor with a predefined log msg
DAVID PARSONS - INTRODUCTION TO GIT 81
$ git push $ Merge remote-tracking branch 'origin/master' master remotes/origin/master
Change foo Modify bar Add content to bar v0.1 Add content to foo Add file baz
DAVID PARSONS - INTRODUCTION TO GIT 82
$ git pull Add content to bar remotes/origin/master master Modify bar Add content to foo Add file baz v0.1
DAVID PARSONS - INTRODUCTION TO GIT 83
$ git pull […] $ Merge remote-tracking branch 'origin/master' master remotes/origin/master Change foo Modify bar Add content to bar v0.1 Add content to foo Add file baz
DAVID PARSONS - INTRODUCTION TO GIT 84
$ # When pushing for the first time, you might get a warning message such as this one: warning: push.default is unset; its implicit value is changing in Git 2.0 from 'matching' to 'simple'. To squelch this message and maintain the current behavior after the default changes, use: git config --global push.default matching To squelch this message and adopt the new behavior now, use: git config --global push.default simple $ # If you do, choose the new behaviour, which is safest: $ git config --global push.default simple
DAVID PARSONS - INTRODUCTION TO GIT 85 DAVID PARSONS - INTRODUCTION TO GIT
DAVID PARSONS - INTRODUCTION TO GIT 86
Log rev 1 Log rev 2 Log rev 3 Add content to foo Add file baz Add content to bar v0.1 Modify bar Change bar $ git merge master
r/o/master
DAVID PARSONS - INTRODUCTION TO GIT 87
$ git merge Auto-merging bar CONFLICT (content): Merge conflict in bar Automatic merge failed; fix conflicts and then commit the result. $
Log rev 1 Log rev 2 Log rev 3 Add content to foo Add file baz Add content to bar v0.1 Modify bar Change bar master r/o/master
DAVID PARSONS - INTRODUCTION TO GIT 88
$ git merge Auto-merging bar CONFLICT (content): Merge conflict in bar Automatic merge failed; fix conflicts and then commit the result. $ $ cat bar This is line 1 This is line 2 This is line 3 <<<<<<< HEAD This is the fourth line ======= This is line number 4 >>>>>>> featureA This is line 5 This is line 6 This is line 7 This is line 8 $
Log rev 1 Log rev 2 Log rev 3 Add content to foo Add file baz Add content to bar v0.1 Modify bar Change bar master r/o/master
DAVID PARSONS - INTRODUCTION TO GIT 89
$ # You can edit the conflicting files directly and then stage them and commit, or you can use a merge tool $ $ git mergetool
Log rev 1 Log rev 2 Log rev 3 Add content to foo Add file baz Add content to bar v0.1 Modify bar Change bar master r/o/master
DAVID PARSONS - INTRODUCTION TO GIT 90
DAVID PARSONS - INTRODUCTION TO GIT 91
$ git config --global merge.tool meld $ git config --global mergetool.meld.cmd 'meld $LOCAL $MERGED $REMOTE' $ git config --global mergetool.meld.trustExitCode false $
DAVID PARSONS - INTRODUCTION TO GIT 92 DAVID PARSONS - INTRODUCTION TO GIT
DAVID PARSONS - INTRODUCTION TO GIT 93
branch
master
DAVID PARSONS - INTRODUCTION TO GIT 94
branch
master
DAVID PARSONS - INTRODUCTION TO GIT 95
featureA
master
DAVID PARSONS - INTRODUCTION TO GIT 96
featureA
Here we have merged branch featureA into branch master. This means we have injected the accumulated changeset of featureA into master Merging a local branch is just the same as merging a remote- tracking branch This merge is embodied by a commit (unless it is a fast- forward) that has two parents and that include the changes made to both branches (here 5 changesets) Branch featureA is untouched
master
DAVID PARSONS - INTRODUCTION TO GIT 97
v1.1.2
v1.1.0 v1.1.1 master v1.2.0
DAVID PARSONS - INTRODUCTION TO GIT 98
DAVID PARSONS - INTRODUCTION TO GIT 99
$ git branch * master $ git branch featureA Log rev 1 Log rev 2 Log rev 3 Add content to foo Add file baz Add content to bar master v0.1
DAVID PARSONS - INTRODUCTION TO GIT 100
$ git branch * master $ git branch featureA $ Log rev 1 Log rev 2 Log rev 3 Add content to foo Add file baz featureA Add content to bar v0.1 master
DAVID PARSONS - INTRODUCTION TO GIT 101
$ git branch * master $ git branch featureA $ git branch featureA * master $ Log rev 1 Log rev 2 Log rev 3 Add content to foo Add file baz featureA Add content to bar v0.1 master
DAVID PARSONS - INTRODUCTION TO GIT 102
$ git branch * master $ git branch featureA $ git branch featureA * master $ git checkout featureA $ git branch * featureA master $ Log rev 1 Log rev 2 Log rev 3 Add content to foo Add file baz featureA Add content to bar v0.1 master
You can also create and checkout a new branch at once with
git checkout –b newBranch
DAVID PARSONS - INTRODUCTION TO GIT 103
$ # Commit stuff in branch featureA $ echo “Blabla” >> foo $ git commit foo -m “Modify foo” Log rev 1 Log rev 2 Log rev 3 Add content to foo Add file baz featureA Add content to bar v0.1 master Modifs not in index
DAVID PARSONS - INTRODUCTION TO GIT 104
$ # Commit stuff in branch featureA $ echo “Blabla” >> foo $ git commit foo -m “Modify foo” $ Log rev 1 Log rev 2 Log rev 3 Add content to foo Add file baz Add […] bar v0.1 Modify foo featureA master
DAVID PARSONS - INTRODUCTION TO GIT 105
$ # Checkout branch master and commit stuff in it $ git checkout master $ Log rev 1 Log rev 2 Log rev 3 Add content to foo Add file baz Add […] bar v0.1 Modify foo featureA master
DAVID PARSONS - INTRODUCTION TO GIT 106
Log rev 1 Log rev 2 Log rev 3 Add content to foo Add file baz Add content to bar v0.1 Modify foo featureA $ # Checkout branch master and commit stuff in it $ git checkout master $ echo “Blabla” >> bar $ git commit foo -m “Modify bar” $ Modify bar master
DAVID PARSONS - INTRODUCTION TO GIT 107
Log rev 1 Log rev 2 Log rev 3 Add content to foo Add file baz Add content to bar v0.1 Modify foo featureA Modify bar master $ git merge featureA
DAVID PARSONS - INTRODUCTION TO GIT 108
Log rev 1 Log rev 2 Log rev 3 Add content to foo Add file baz Add content to bar v0.1 Modify bar Modify foo featureA Merge branch ‘featureA’ master
Merging a local branch is just the same as merging a remote-tracking branch
$ git merge featureA $
DAVID PARSONS - INTRODUCTION TO GIT 109 DAVID PARSONS - INTRODUCTION TO GIT
DAVID PARSONS - INTRODUCTION TO GIT 110
$ # Create an annotated tag named "v0.1" $ git tag –a v0.1 –m “version 0.1” $ # List tags $ git tag v0.1 $ Log rev 3 Add content to foo Add file baz Add content to bar v0.1 master
DAVID PARSONS - INTRODUCTION TO GIT 111
git push origin <tagname> or git push origin –tags Git fetch origin --tags
DAVID PARSONS - INTRODUCTION TO GIT 112 DAVID PARSONS - INTRODUCTION TO GIT
DAVID PARSONS - INTRODUCTION TO GIT 113
DAVID PARSONS - INTRODUCTION TO GIT 114
A B D C
DAVID PARSONS - INTRODUCTION TO GIT 115 DAVID PARSONS - INTRODUCTION TO GIT
DAVID PARSONS - INTRODUCTION TO GIT 116
$ git rebase Log rev 1 Log rev 2 Log rev 3 Add content to foo Add file baz Add content to bar v0.1 Modify bar Change bar master remotes/origin/master
DAVID PARSONS - INTRODUCTION TO GIT 117
$ git rebase $ Log rev 1 Log rev 2 Log rev 3 Add content to foo Add file baz Add content to bar v0.1 Change bar Change bar master remotes/origin/master Modify bar
This was your HEAD just before the rebase This is a brand new commit
DAVID PARSONS - INTRODUCTION TO GIT 118
DAVID PARSONS - INTRODUCTION TO GIT 119
Merge Rebase
DAVID PARSONS - INTRODUCTION TO GIT 120
Merge Rebase Mixed
DAVID PARSONS - INTRODUCTION TO GIT 121 DAVID PARSONS - INTRODUCTION TO GIT
DAVID PARSONS - INTRODUCTION TO GIT 122
LIEU LOCALISATION
Antenne INRIA Lyon la Doua