Created Thursday 15 October 2015

xkcd-Comic: http://xkcd.com/1597/
git config --global user.name <Name> git config --global user.email <mail@adresse.de> git config --global core.editor vim
Im entsprechenden Verzeichnis:
git init
Im working directory gibt es die Datei .gitignore . Darin z.B. die Zeile
*.o
einfügen, und alle *.o-Dateien werden bei "git add --all" ignoriert.
git add --all
git commit
git log --all --oneline --graph --decorate
Damit man nicht den langen log-Befehl eingeben muß, macht man sich einen Alias:
git config --global alias.lg 'log --all --oneline --graph
--decorate'
HEAD | v master | v ---- | C1 | ----
git commit
HEAD
|
v
master
|
v
---- ----
| C1 |<---| C2 |
---- ----
Der Branch "master" ist ein Zeiger auf den Commit C2. HEAD ist ein Zeiger auf den aktuellen Branch (hier "master").
HEAD
|
v
master
|
v
---- ----
| C1 |<---| C2 |
---- ----
git branch testing
HEAD
|
v
master
|
v
---- ----
| C1 |<---| C2 |
---- ----
^
|
testing
HEAD
|
v
master
|
v
---- ----
| C1 |<---| C2 |
---- ----
^
|
testing
git checkout testing
master
|
v
---- ----
| C1 |<---| C2 |
---- ----
^
|
testing
^
|
HEAD
HEAD
|
v
master
|
v
---- ----
| C1 |<---| C2 |
---- ----
^
|
testing
git commit
HEAD
|
v
master
|
v
---- ---- ----
| C1 |<---| C2 |<---| C3 |
---- ---- ----
^
|
testing
git checkout testing
master
|
v
---- ---- ----
| C1 |<---| C2 |<---| C3 |
---- ---- ----
^
|
testing
^
|
HEAD
git commit
master
|
v
----
| C3 |
----
/
---- ---- <-/
| C1 |<---| C2 |
---- ---- <-\
\
----
| C4 |
----
^
|
testing
^
|
HEAD
HEAD
|
v
master hotfix
| |
v v
---- ---- ----
| C1 |<---| C2 |<---| C3 |
---- ---- ----
git merge hotfix
HEAD
|
v
hotfix = master
|
v
---- ---- ----
| C1 |<---| C2 |<---| C3 |
---- ---- ----
HEAD
|
v
master
|
v
----
| C3 |
----
/
---- ---- <-/
| C1 |<---| C2 |
---- ---- <-\
\
---- ----
| C4 |<---| C5 |
---- ----
^
|
testing
C2 ist der gemeinsame Vorfahre.
git merge testing
HEAD
|
---- v
| C3 |<-----------\ master
---- \ |
/ \ v
---- ---- <-/ \ ----
| C1 |<---| C2 | | C6 |
---- ---- <-\ / ----
\ /
---- ---- /
| C4 |<---| C5 |<-/
---- ----
^
|
testing
master
|
v
----
| C3 |
----
/
---- ---- <-/
| C1 |<---| C2 |
---- ---- <-\
\
---- ----
| C4 |<---| C5 |
---- ----
^
|
testing
^
|
HEAD
git rebase master
master
|
v
---- ---- ---- ----- -----
| C1 |<---| C2 |<---| C3 |<---| C4' |<---| C5' |
---- ---- ---- ----- -----
^
|
testing
^
|
HEAD
C4' und C5' unterscheiden sich von C4 und C5. C5' ist identisch mit C6 im Beispiel "Three way merge".
________Server__________ | | | master | | | | | v | | ---- ---- | | | C0 |<---| C1 | | | ---- ---- | |______________________|
**Alice$ git clone https://server.com/myproject**
________Server__________ ____________Alice__________
| | | |
| master | | origin/master |
| | | | | |
| v | | v |
| ---- ---- | | ---- ---- |
| | C0 |<---| C1 | | | | C0 | <---| C1 | |
| ---- ---- | | ---- ---- |
|______________________| | ^ |
| | |
| master |
|_________________________|
(Auf dem Server wurde master inzwischen von jemand anderem weiterentwickelt. Alice weiß noch nichts davon, hat aber in der Zwischenzeit auch etwas getan.)
___________Server_____________ ______________Alice_______________
| | | |
| master | | origin/master |
| | | | | |
| v | | v |
| ---- ---- ---- | | ---- ---- ---- |
| | C0 |<---| C1 |<---| C2 | | | | C0 | <---| C1 |<---| C3 | |
| ---- ---- ---- | | ---- ---- ---- |
|____________________________| | ^ |
| | |
| master |
| ^ |
| | |
| HEAD |
|________________________________|
Alice$ git fetch origin
___________Server_____________ _________________Alice_______________
| | | |
| master | | origin/master |
| | | | | |
| v | | v |
| ---- ---- ---- | | ---- |
| | C0 |<---| C1 |<---| C2 | | | /-| C2 | |
| ---- ---- ---- | | / ---- |
|____________________________| | ---- ---- <-/ |
| | C0 |<---| C1 | |
| ---- ---- <-\ |
| \ ---- |
| \-| C3 | |
| ---- |
| ^ |
| | |
| master |
| ^ |
| | |
| HEAD |
|___________________________________|
Alice$ git merge origin/master
___________Server_____________ ____________________Alice___________________
| | | |
| master | | origin/master |
| | | | | |
| v | | v |
| ---- ---- ---- | | ---- |
| | C0 |<---| C1 |<---| C2 | | | /-| C2 |<-\ |
| ---- ---- ---- | | / ---- \ |
|____________________________| | ---- ---- <-/ \ ---- |
| | C0 |<---| C1 | | C4 | |
| ---- ---- <-\ / ---- |
| \ ---- / ^ |
| \-| C3 |<-/ | |
| ---- master |
| ^ |
| | |
| HEAD |
|__________________________________________|
___________Server_____________ ______________Alice_______________
| | | |
| master | | origin/master |
| | | | | |
| v | | v |
| ---- ---- | | ---- ---- ---- |
| | C0 |<---| C1 | | | | C0 | <---| C1 |<---| C2 | |
| ---- ---- | | ---- ---- ---- |
|____________________________| | ^ |
| | |
| master |
| ^ |
| | |
| HEAD |
|________________________________|
Alice$ git push
___________Server_____________ ______________Alice_______________
| | | |
| master | | origin/master |
| | | | | |
| v | | v |
| ---- ---- ---- | | ---- ---- ---- |
| | C0 |<---| C1 |<---| C2 | | | | C0 | <---| C1 |<---| C2 | |
| ---- ---- ---- | | ---- ---- ---- |
|____________________________| | ^ |
| | |
| master |
| ^ |
| | |
| HEAD |
|________________________________|
___________Server_____________ ______________Alice__________________
| | | |
| master | | origin/master |
| | | | | |
| v | | v |
| ---- ---- ---- | | ---- ---- ---- |
| | C0 |<---| C1 |<---| C2 | | | | C0 | <---| C1 |<------| C2 | |
| ---- ---- ---- | | ---- ---- <-\ ---- |
|____________________________| | | ^ |
| | | |
| | master |
| | ^ |
| | | |
| | HEAD |
| \ |
| \ ---- |
| \-| C3 | |
| ---- |
| ^ |
| | |
| testing |
|___________________________________|
Alice$ git push origin testing:testing_alice
___________Server_______________ ______________Alice__________________
| | | |
| master | | origin/master |
| | | | | |
| v | | v |
| ---- ---- ---- | | ---- ---- ---- |
| | C0 |<---| C1 |<-----| C2 | | | | C0 | <---| C1 |<------| C2 | |
| ---- ---- <-\ ---- | | ---- ---- <-\ ---- |
| \ ---- | | | ^ |
| \-| C3 | | | | | |
| ---- | | | master |
| ^ | | | ^ |
| | | | | | |
| testing_alice | | | HEAD |
| | | \ |
|______________________________| | \ ---- |
| \-| C3 | |
| ---- |
| ^ |
| | |
| testing |
|___________________________________|
___________Server_______________ ______________Alice__________________
| | | |
| master | | origin/master |
| | | | | |
| v | | v |
| ---- ---- ---- | | ---- ---- ---- |
| | C0 |<---| C1 |<-----| C2 | | | | C0 | <---| C1 |<------| C2 | |
| ---- ---- <-\ ---- | | ---- ---- <-\ ---- |
| \ ---- | | | ^ |
| \-| C3 | | | | | |
| ---- | | | master |
| ^ | | | ^ |
| | | | | | |
| testing_alice | | | HEAD |
| | | \ |
|______________________________| | \ ---- |
| \-| C3 | |
| ---- |
| ^ |
| | |
| testing |
|___________________________________|
Alice$ git push origin :testing_alice
___________Server_____________ ______________Alice__________________
| | | |
| master | | origin/master |
| | | | | |
| v | | v |
| ---- ---- ---- | | ---- ---- ---- |
| | C0 |<---| C1 |<---| C2 | | | | C0 | <---| C1 |<------| C2 | |
| ---- ---- ---- | | ---- ---- <-\ ---- |
|____________________________| | | ^ |
| | | |
| | master |
| | ^ |
| | | |
| | HEAD |
| \ |
| \ ---- |
| \-| C3 | |
| ---- |
| ^ |
| | |
| testing |
|___________________________________|
| screenshot_2016-05-10-131846.png | 57.9kb |