git started – ipc2012
TRANSCRIPT
![Page 1: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/1.jpg)
@usefulthink
git$ git initstarted...
Martin Schuhfuß
![Page 2: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/2.jpg)
about me…
Martin Schuhfuß/ Hamburger (schon immer)
/ JS-Nerd, octocat-fanboy, Performance-Fetischist/ verliebt in unmögliche Aufgaben und elegante Lösungen/ Architekt und Entwickler bei spot-media AG (auch schon immer)
@usefulthink | github.com/usefulthink
![Page 3: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/3.jpg)
und ihr so?
/ Arbeit mit größeren Teams?
/ Erfahrung mit Versionsmanagement?
/ …mit git?
/ …git auf der Kommandozeile?
![Page 4: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/4.jpg)
gitstarted...
![Page 5: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/5.jpg)
![Page 6: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/6.jpg)
http://geekandpoke.typepad.com/geekandpoke/2012/07/simply-explained-2.html
![Page 7: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/7.jpg)
![Page 8: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/8.jpg)
sorry, doesn‘t help.
![Page 9: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/9.jpg)
////////////////////////////////////////////////////////////////
! GIT - the stupid content tracker
////////////////////////////////////////////////////////////////
"git" can mean anything, depending on your mood.
- random three-letter combination that is pronounceable, and not actually used by any common UNIX command. The fact that it is a mispronunciation of "get" may or may not be relevant. - stupid. contemptible and despicable. simple. Take your pick from the dictionary of slang. - "global information tracker": you're in a good mood, and it actually works for you. Angels sing, and a light suddenly fills the room. - "goddamn idiotic truckload of sh*t": when it breaks
Linus Torwalds, git README, initial commit(https://github.com/git/git/blob/master/README)
![Page 10: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/10.jpg)
New Oxford American Dictionary
Urban Dictionary(http://www.urbandictionary.com/define.php?term=git)
![Page 11: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/11.jpg)
Linus Torwalds in einem privaten Interview 2012(http://typicalprogrammer.com?p=143)
git has taken over where Linux left off separating the geeks into know-nothings and know-it-alls. I didn‘t really expect anyone to use it because it‘s so hard to use, but that turns out to be its big appeal.No technology can ever be too arcane or complicated for the black-t-shirt crowd.
„
![Page 12: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/12.jpg)
Inhalt
![Page 13: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/13.jpg)
Inhalt
/ Everyday git
/ Grundlagen und HintergründeI. Graphen und ErreichbarkeitII. git-Objekte und Funktionsweise
/ Branches und Histories
![Page 14: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/14.jpg)
! Inhalt
/ Warum Git? (siehe http://whygitisbetterthanx.com/)
/ Umgang mit grafischen Tools und IDE-Integration (ich bin bash-freund, seid es auch)
/ Viele, viele Varianten und mögliche Parameter der Git-Befehle
![Page 15: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/15.jpg)
Everyday gitDas wichtigste zum warmwerden…
![Page 16: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/16.jpg)
init / clone
~/src $ mkdir git-test ; cd git-test~/src/git-test $ git initInitialized empty Git repository in ../src/git-test/.git/
git-Repositories einrichten
„GIT_DIR“
~/src $ git clone http://github.com/geeksam/do-re-miCloning into 'do-re-mi'...remote: Counting objects: 31, done.remote: Compressing objects: 100% (23/23), done.remote: Total 31 (delta 6), reused 29 (delta 4)Unpacking objects: 100% (31/31), done.
Remote-Repository
![Page 17: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/17.jpg)
config
~/src/git-test $ git config --global user.name “Vor- und Nachname“~/src/git-test $ git config --global user.email “[email protected]“~/src/git-test $ git config --global color.ui auto
git Konfigurieren
(wird der Parameter --global weggelassen, wird die Konfiguration nur für das aktuelle Repository angepasst)
Die globale Konfiguration von Git wird in der Datei ~/.gitconfig (ini-Format) im Home-Verzeichnis gespeichert, lokale Konfiguration findet sich
im Projektverzeichnis unter .git/config
![Page 18: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/18.jpg)
config
~/src/git-test $ git config --global alias.hist \ ‘log --oneline --graph --decorate‘~/src/git-test $ git hist
Aliase definieren…
[alias] hist = log --oneline --graph --decorate sdiff = diff --staged st = status ci = commit --all
~/.gitconfig
![Page 19: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/19.jpg)
status
~/local/src/git-test $ git status# On branch master## Initial commit#nothing to commit (create/copy files and use "git add" to track)
Änderungen und sonstige Status-Informationen des Repositories abfragen.
...oder sich sagen lassen was zu tun ist :)
![Page 20: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/20.jpg)
add
~/src/git-test $ echo "Hallo Welt" > README.md~/src/git-test $ git status# On branch master## Initial commit## Untracked files:# (use "git add <file>..." to include in what will be committed)## README.mdnothing added to commit but untracked files present (use "git add" to track)
Änderungen in den Index aufnehmen und für den nächsten Commit vorsehen.
![Page 21: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/21.jpg)
add
~/src/git-test $ git add README.md~/src/git-test $ git status# On branch master## Initial commit## Changes to be committed:# (use "git rm --cached <file>..." to unstage)## new file: README.md#
machen wir das doch einfach mal...
![Page 22: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/22.jpg)
commit
~/src/git-test $ git commit -m 'first commit'[master (root-commit) dc69a36] first commit 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 README.md
neuen Snapshot erzeugen
DISCLAIMER: Um mich kurzzufassen werde ich keine besonders hilfreichen und/oder sinnvollen commit-messages schreiben. Normalerweise sterben
Kätzchen durch solche commit-messages.
(-m: commit-message direkt angeben; andernfalls öffnet sich euer $EDITOR)
![Page 23: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/23.jpg)
weitere Änderungen~/src/git-test $ 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: README.md#no changes added to commit (use "git add" and/or "git commit -a")
~/src/git-test $ git add README.md ; git status# On branch master# Changes to be committed:# (use "git reset HEAD <file>..." to unstage)## modified: README.md#
![Page 24: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/24.jpg)
log und diff
~/src/git-test $ git logcommit 2eee492f9f9941e18c0c1449dcfeb46c679ae080Author: Martin Schuhfuss <m.schuhfuss@gmail>Date: Fri Jan 6 15:57:59 2012 +0100
first comit~/src/git-test $ echo "Hello World" > README.md~/src/git-test $ git diffdiff --git a/README.md b/README.mdindex b7d6715..557db03 100644--- a/README.md+++ b/README.md@@ -1 +1 @@-Hallo Welt+Hello World
Änderungen nachvollziehen
Die Befehle git log und git diff sind extrem vielseitig einsetzbar, abhängig davon, mit welchen Parametern und Argumenten sie aufgerufen werden.
![Page 25: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/25.jpg)
noch mehr...weitere Befehle für den alltäglichen Gebrauch
git checkout <datei>: Änderungen rückgängig machen und Datei im Arbeitsverzeichnis mit dem letzten Snapshot überschreiben*.
git reset HEAD <datei>: Änderungen im Index / Staging-Bereich rückgängig machen*.git rm <datei>: Dateien löschen und aus dem Index entfernen
* checkout und reset gehören mit zu den mächtigsten der git-Kommandos. Hier beschrieben ist nur einer der einfachsten der Anwendungsfälle.
![Page 26: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/26.jpg)
Ein bisschen TheorieGraphen und Erreichbarkeit.
![Page 29: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/29.jpg)
Krieg der Sterne Die Rache der Sith
Das Imperium schlägt zurück
Die Rückkehr der Jedi-Ritter
Die dunkle Bedrohong
Angriff der Klonkrieger
1 2 3 4 5 6
= Nachfolger (Produktionsreihenfolge)
star-wars
![Page 30: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/30.jpg)
Krieg der SterneDie Rache der Sith
Das Imperium schlägt zurück
Die Rückkehr der Jedi-Ritter
Die dunkle Bedrohong
Angriff der Klonkrieger
1 2 34 5 6
= Nachfolger (Storyline)
star-wars
![Page 31: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/31.jpg)
Krieg der Sterne
AUCH ZEITLICHE ABFOLGE IST NICHT IMMER EINDEUTIG :)
DIE PRODUKTIONSREIHENFOLGE MUSS NICHT ZWINGEND DIE REIHENFOLGE SEIN, DIE SPÄTER
Die Rache der Sith
Das Imperium schlägt zurück
Die Rückkehr der Jedi-Ritter
Die dunkle Bedrohong
Angriff der Klonkrieger
1 2 34 5 6
= Geschichte baut darauf auf
star-wars
![Page 32: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/32.jpg)
erste halbwegs lauffähige Version
Feature für neue Version
beta endlich gelauncht! d‘oh! neue Version
= wurde darauf aufgebaut
Das. Killer. Feature.
master
nice_feature
Revisions-GraphReferenzen
awesomesauce
![Page 33: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/33.jpg)
erste halbwegs lauffähige Version
Feature für neue Version
beta endlich gelauncht! d‘oh! neue Version
Das. Killer. Feature.
master
nice_feature
Revisions-GraphErreichbarkeit
awesomesauce
1 2 3
4
5 6
7
master 6 – 4 – 5 – 3 – 2 – 1
nice_feature 4 – 2 – 1
awesomesauce 7 – 5 – 3 – 2 – 1
alter kram
Ist über keine der Referenzen zu erreichen!
Die History sieht für jede Referenz
anders aus
![Page 34: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/34.jpg)
Wozu das alles?
git wird niemals (wirklich nie) irgendetwas löschen, was über eine
Referenz erreichbar ist.
(Ihr dürft euch jetzt entspannen.)
![Page 35: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/35.jpg)
Eintauchengit-Objekte und Funktionsweise
![Page 36: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/36.jpg)
SnapshotsCVS/SVN
File A Δ1
File B
File C
Version 1 Version 2 Version 3 Version 4 Version 5
Δ2
Δ1 Δ2
Δ1 Δ2 Δ3
A
B
C
Version 1 Version 2 Version 3 Version 4 Version 5
A1
B
C1
A1
B
C2
A2
B1
C2
A2
B2
C3
overall-state (exact copy)
at a given time
changes (Deltas)
over time
Git
![Page 37: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/37.jpg)
Git Objekte5a9e02d9…
<?php
require_once __DIR__.'/../app/bootstrap.php.cache';require_once __DIR__.'/../app/AppKernel.php';
use Symfony\Component\HttpFoundation\Request;
$kernel = new AppKernel('prod', false);$kernel->loadClassCache();$kernel->handle(Request::createFromGlobals())->send();
fe32a871…blob a501bc92… .htaccessblob 5a9e02d9… app.phpblob 7e22a497… app_dev.phptree 2149b94c… css tree f02b2258… images
ef129a71…ef129a71…Tree:
Parent:Author:
Comitter:
fe32a871…a9d81ef3…MartinMartin
Awesome commit-message is awesome.
Awesome commit-message is awesome.
Commit
Tree
Blob
![Page 38: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/38.jpg)
Git Objekte~/src/git-test $ tree.!"" README.md#"" web !"" index.html #"" style.css~/src/git-test $ git add .~/src/git-test $ git stat# On branch master# Changes to be committed:# (use "git reset HEAD <file>..." to unstage)## new file: web/index.html# new file: web/style.css#~/src/git-test $ git commit -m ‘index and styles‘[master 6434aeb] index and styles 1 files changed, 10 insertions(+), 0 deletions(-) create mode 100644 web/index.html create mode 100644 web/style.css
![Page 39: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/39.jpg)
Git Objekte636af660…
Hallo Welt97cd79d8…
blob 636af660… README.mdtree 6e6cee32… web6434aeb7…6434aeb7…
Tree:Parent:
97cd79d8…2eee492f…
index and stylesindex and styles
2eee49…initial commit
6e6cee32…blob 94d985df… index.htmlblob e69de29b… style.css
94d985df…<!DOCTYPE html><html> <head> <title>Hallo Welt!</title> <link rel="stylesheet" href="st… </head> <body> <h1>Hallo Welt!</h1> </body></html>
e69de29b…<leer>
![Page 40: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/40.jpg)
SHA1636af660…
Hallo Welt
e69de29b…<leer>
Egal wo auf der Welt jemand eine leere Datei in einem git-repository speichert – mit welchem Betriebssystem und welcher git-Version auch
immer – diese Datei wird immer denselben SHA1-Hash (e69de29bb2d1d6434b8b29ae775ad8c2e48c5391) erhalten.
Aufgrund der tatsächlichen Länge der SHA1-Hashes (160 bit / 2160 mögliche Kombinationen) ist es faktisch ausgeschlossen, dass zwei
unterschiedliche Dateien mit denselben SHA1-Wert erhalten.
Absolut und global Eindeutige Ids
![Page 41: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/41.jpg)
Three Trees
working directory index HEAD
repository
Der aktuelle Checkout. Dies ist das eigentliche Projektverzeichnis und enthält die Dateien, mit
denen ihr arbeitet.
Staging-Bereich zur Vorbereitung von
neuen Snapshots bzw. Commits
Der HEAD-Commit zeigt auf den letzten
erzeugten Snapshot im aktuellen Branch und
ist immer der Snapshot, der zum
Parent des nächsten Commits wird.
![Page 42: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/42.jpg)
unstagechanges
Three Trees
working directory index
stagechanges
createsnapshot
git add <file ...>git rm <file ...> git commit
git reset <file ...>Die Dateien im Working
Directory bleiben unverändert, die Änderungen werden aus
dem Index entfernt
HEADrepository
![Page 43: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/43.jpg)
Three Trees
working directory index HEAD
repository
git reset --hard <file ...>
unstagechanges
git reset <file ...>Die Dateien im Working
Directory bleiben unverändert, die Änderungen werden aus
dem Index entfernt
Unter dem Titel „reset demystified“ gibt auf progit.org (http://progit.org/2011/07/11/reset.html) eine hervorragende Erklärung zu der genauen Funktionsweise von reset und checkout.
Sowohl der Index als auch die Working-Copy werden
zurückgesetzt
![Page 44: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/44.jpg)
working directory index HEAD
repository
repositorymaster
HEAD
Beispiel
![Page 45: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/45.jpg)
Hallo Welt
working directory index HEAD
repository
repositorymaster
HEAD
README.md
echo “Hallo Welt“ > README.md
![Page 46: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/46.jpg)
636af6...
working directory index HEAD
repository
repositorymaster
HEAD
README.md
git add README.md
README.md
636af6...Hallo Welt
blob
![Page 47: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/47.jpg)
working directory index HEAD
repository
repositorymaster
HEAD
README.md
git commit -m ‘initial commit‘
636af6...
README.md
636af6...
README.md
README.md: 636af6...
2eee49...
master2eee49...
Tree: fd72bd...Author: MartinComitter: Martin
initial commit
fd72bd...blob 636af6... README.md
636af6...Hallo Welt
commit
tree blob
![Page 48: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/48.jpg)
Hallo Welt
working directory index HEAD
repository
repositorymaster
HEAD
README.md
636af6...
README.md
636af6...
README.md
README.md: 636af6...
2eee49...
master
jetzt ändern wir die README.md…
Hello World!
README.md
636af6...Hallo Welt
![Page 49: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/49.jpg)
Hello World!
working directory index HEAD
repository
repositorymaster
HEAD
README.md
636af6...
README.md
636af6...
README.md
README.md: 636af6...
2eee49...
master
git add README.md
636af6...Hallo Welt
7e5411…
README.md
7e5411…Hello World!
![Page 50: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/50.jpg)
Hello World!
working directory index HEAD
repository
repository
README.md
636af6...
README.md
7e5411...
README.md
README.md: 636af6...
2eee49...
git commit -m ‘english‘
636af6...Hallo Welt
7e5411…Hello World!
README.md: 7e5411...
f6ba12...
7e5411…
README.md
master
HEAD
master
![Page 51: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/51.jpg)
UnterwegsBranches und Histories
![Page 52: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/52.jpg)
A
HEAD
mastermaster
B C
Szenario
Commit
Branch
Verweis zum Parent-Commit
HEAD…oder auch: der Commit,
der zum Parent von neuen Commits wird
eine Referenz für eine Commit-Id
A, B, C usw. stehen als Platzhalter für die
„echten“ Commit-Ids
Mit jedem Commit wird die Referenz (master) des aktuellen Branches (vom HEAD angezeigt) automatisch mitbewegt.
![Page 53: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/53.jpg)
A B C
git branch featuregit checkout feature
Branch erstellen
master
Kurzform:git checkout -b feature
HEAD
feature
![Page 54: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/54.jpg)
A B C
git commit …
Branch erstellen
D
master
HEAD
feature
![Page 55: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/55.jpg)
feature
A B C
git checkout mastergit merge feature
fast-forward merge
D
HEAD
master
kein neuer commitBei einem fast-forward
merge wird kein separater merge-commit erzeugt,
lediglich der Ziel-Branch (master) wird auf die neue
Position „Vorgespult“.
mit git merge --no-ff feature kann verhindert werden, dass fast-forward merges gemacht werden.
Mit dem Parameter --ff-only werden sie erzwungen.
![Page 56: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/56.jpg)
A B C
git checkout featuregit commit …
Ein weiterer Commit
D E
master
HEAD
feature
![Page 57: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/57.jpg)
A B C D E
HEAD
master
feature
git checkout mastergit commit …
Bugfixes…
F G
![Page 58: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/58.jpg)
C D E
feature
git checkout mastergit merge feature
Merge!
F G
HEAD
master
H
merge-commit...hat im Gegensatz zu einem
normalen Commit zwei Elternteile und wird aus den
Änderungen der beiden Branches kombiniert.
Commit-Message:merged branch ‘feature‘
Konflikte...treten auf, wenn in beiden
Branches in denselben Bereichen einer Datei Änderungen vorgenommen wurden
![Page 59: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/59.jpg)
master
D EC
F G
Konflikte vermeidengit rebase
D‘ E‘
git checkout featuregit rebase master
HEAD
feature
git rebase nimmt alle Änderungen aus einem
bestehenden Branch und verschiebt diese an eine
andere Position. Die Basis (nearest common ancestor)
des feature-Branches wird dabei von C zu G
ACHTUNGnach dem rebase sind die
Original-Commits nur noch über ihre Id erreichbar.
![Page 60: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/60.jpg)
ups.
irgendwas schief gelaufen?Komisches Zeug auf der Kommandozeile?
Irgendwas falsch gemacht?
![Page 61: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/61.jpg)
![Page 62: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/62.jpg)
git wird niemals (wirklich nie) irgendetwas löschen, was über eine
Referenz erreichbar ist.
(Ihr dürft euch jetzt auch wieder entspannen.)
![Page 63: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/63.jpg)
Der Rückwärtsgang--abort – Alles zurück auf Anfang
~/src/git-test $ $ git rebase master First, rewinding head to replay your work on top of it...Applying: first feature commitUsing index info to reconstruct a base tree...Falling back to patching base and 3-way merge...Auto-merging README.mdCONFLICT (content): Merge conflict in README.mdFailed to merge in the changes.Patch failed at 0001 first feature commit
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".~/src/git-test $ git rebase --abort
![Page 64: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/64.jpg)
Der Vorwärtsgangrebase - Konflikte auflösen
~/src/git-test $ $ git rebase master First, rewinding head to replay your work on top of it...Applying: first feature commitUsing index info to reconstruct a base tree...Falling back to patching base and 3-way merge...Auto-merging README.mdCONFLICT (content): Merge conflict in README.mdFailed to merge in the changes.Patch failed at 0001 first feature commit
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".
Commit-Message des fehlgeschlagenen patches
![Page 65: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/65.jpg)
~/src/git-test $ git stat# Not currently on any branch.# Changes to be committed:# (use "git reset HEAD <file>..." to unstage)## modified: web/style.css## Unmerged paths:# (use "git reset HEAD <file>..." to unstage)# (use "git add/rm <file>..." as appropriate to mark resolution)## both modified: README.md#~/src/git-test $ cat README.md <<<<<<< HEADHallo Welt!
im branch master kommt was dazu...=======Hello World>>>>>>> first feature commit
Jeder Konflikt innerhalb der Datei wird mit Markierungen versehen.Die Datei wird bearbeitet, und der
Konflikt aufgelöst, wobei die MArkierungen entfernt werden.
rebase - Konflikte auflösenDer Vorwärtsgang
![Page 66: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/66.jpg)
~/src/git-test $ cat README.md Hello World
im branch master kommt was dazu...~/src/git-test $ git add README.md~/src/git-test $ git stat# Not currently on any branch.# Changes to be committed:# (use "git reset HEAD <file>..." to unstage)## modified: README.md# modified: web/style.css#~/src/git-test $ git rebase --continueApplying: first feature commitApplying: second commit (add file)Applying: third commit (changed README.md)
rebase - Konflikte auflösenDer Vorwärtsgang
![Page 67: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/67.jpg)
N Omaster
K L M
feature-a
moar fun with rebase
git rebase master feature-b --onto feature-a
O‘N‘
feature-b HEAD
feature-b
~/src/git-test $ git rebase master feature-b --onto feature-a First, rewinding head to replay your work on top of it...Applying: first commit on branch feature-b (N $ N‘)Applying: second commit on branch feature-b (O $ O‘)
from to new base
![Page 68: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/68.jpg)
Schweres TerrainSurvival Tips und Werkzeug
![Page 69: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/69.jpg)
hilfreiche Befehle
git add --patch: interaktives Staging von Änderungen. Hilft, wenn in einer Datei Änderungen sind, die getrennt voneinander comitted werden sollen.git commit --amend: den letzen Commit nochmal bearbeiten. Üblicherweise zum Beheben von Tippfehlern in Commit-Messages aber auch git rebase --interactive: wie commit --amend auf Crack. Mit Kettensäge*. Erlaubt das beliebige Umstellen und nachträgliche Ändern von Commits. Unfassbar mächtig, aber mit Vorsicht zu genießen (vorher immer ein Tag setzen, dann kann man sich zumindest wieder retten, wenns was nicht klappt).
![Page 70: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/70.jpg)
hilfreiche Befehle
git stash und git stash pop: Mit git stash können alle gerade vorhandenen Änderungen „beiseite gelegt“ werden. Das Working-Directory und der Index werden auf den Stand des HEAD zurückgesetzt. stash pop stellt den beiseite gelegten Stand wieder her.git clean: Räumt unversionierte Dateien aus dem Weg, mit dem Parameter -f werden nur unversionierte Dateien entfernt, mit -d auch die Verzeichnisse.git mergetool: Die UNO oder sowas. Hilft bei der Konfliktlösung.
![Page 71: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/71.jpg)
Der hilfreichste Befehl
git help
![Page 72: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/72.jpg)
http://ndpsoftware.com/git-cheatsheet.html
Cheat!
(mehr davon unter http://help.github.com/git-cheat-sheets)
![Page 73: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/73.jpg)
Online-Hilfe
/ http://progit.org/ http://marklodato.github.com/visual-git-guide/ http://book.git-scm.com/ http://think-like-a-git.net/ http://gitimmersion.com
![Page 74: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/74.jpg)
Fragen?
![Page 75: git started – IPC2012](https://reader034.vdocuments.net/reader034/viewer/2022052507/55834457d8b42a5b268b4c50/html5/thumbnails/75.jpg)
Vielen Dank!
Martin Schuhfuß@usefulthink
Feedback:https://joind.in/7355