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 |