$ git config --global user.name "Natanael Arndt"
$ git config --global user.email "arndt@informatik.uni-leipzig.de"
https://white-gecko.github.io/GitTutorial$ cd
$ mkdir git-tutorial
$ cd ~/git-tutorial
$ git init repo
Initialisierte leeres Git-Repository in
/home/natanael/git-tutorial/repo/.git/
$ cd ~/git-tutorial/repo
$ ls
$ ls -a
. .. .git
$ cd .git
$ ls
branches config description HEAD hooks info objects refs
what's inside your .git directory
$ cd ~/git-tutorial/repo
$ git status
Auf Branch master
Initialer Commit
nichts zu committen (Erstellen/Kopieren Sie Dateien und benutzen
Sie "git add" zum Beobachten)
$ cd ~/git-tutorial/repo
$ echo "Hallo Git" > file.txt
$ git status
Auf Branch master
Initialer Commit
Unbeobachtete Dateien:
(benutzen Sie "git add <Datei>...", um die Änderungen zum
Commit vorzumerken)
file.txt
nichts zum Commit vorgemerkt, aber es gibt unbeobachtete Dateien
(benutzen Sie "git add" zum Beobachten)
$ git add file.txt
$ git status
Auf Branch master
Initialer Commit
zum Commit vorgemerkte Änderungen:
(benutzen Sie "git rm --cached <Datei>..." zum Entfernen aus
derStaging-Area)
neue Datei: file.txt
$ git config --global user.name "Natanael Arndt"
$ git config --global user.email "arndt@informatik.uni-leipzig.de"
$ git commit -m "Hallo Git"
[master (Basis-Commit) 6b7add4] Hallo Git
1 file changed, 1 insertion(+)
create mode 100644 file.txt
$ git status
Auf Branch master
nichts zu committen, Arbeitsverzeichnis unverändert
$ echo "again" >> file.txt
$ git status
Auf Branch master
Änderungen, die nicht zum Commit vorgemerkt sind:
(benutzen Sie "git add <Datei>...", um die Änderungen zum
Commit vorzumerken)
(benutzen Sie "git checkout -- <Datei>...", um die Änderungen
im Arbeitsverzeichnis zu verwerfen)
geändert: file.txt
keine Änderungen zum Commit vorgemerkt (benutzen Sie "git add"
und/oder "git commit -a")
$ git add file.txt
$ git commit -m "again"
[master 0a777cb] again
1 file changed, 1 insertion(+)
$ git status
Auf Branch master
nichts zu committen, Arbeitsverzeichnis unverändert
$ git log
commit 0a777cba46cd556a1246d033e0b11dedbfee6815
Author: Natanael Arndt <arndt@informatik.uni-leipzig.de>
Date: Fri Dec 16 01:55:56 2016 +0100
again
commit 6b7add4815e9c99d1f3f44c03cea58339b408f4d
Author: Natanael Arndt <arndt@informatik.uni-leipzig.de>
Date: Fri Dec 16 01:49:44 2016 +0100
Hallo Git
$ cd ~/git-tutorial/remote-repo
$ git init --bare remote-repo
Initialisierte leeres Git-Repository in
/home/natanael/git-tutorial/remote-repo
$ cd remote-repo
$ ls -a
. branches description hooks objects
.. config HEAD info refs
$ git log
fatal: bad default revision 'HEAD'
$ cd ~/git-tutorial/repo
$ git remote add anderes ../remote-repo
$ git remote -v
anderes ../remote-repo (fetch)
anderes ../remote-repo (push)
$ git push --set-upstream anderes master
Zähle Objekte: 6, Fertig.
Delta compression using up to 4 threads.
Komprimiere Objekte: 100% (2/2), Fertig.
Schreibe Objekte: 100% (6/6), 444 bytes | 0 bytes/s, Fertig.
Total 6 (delta 0), reused 0 (delta 0)
To ../remote-repo
* [new branch] master -> master
--set-upstream bzw. -u ist nur einmal notwendig, um den Branch dem remote Branch zuzuordnen. Alternativ git branch --set-upstream-to=anderes/master.
$ cd ~/git-tutorial/remote-repo
$ git log
commit 0a777cba46cd556a1246d033e0b11dedbfee6815
Author: Natanael Arndt <arndt@informatik.uni-leipzig.de>
Date: Fri Dec 16 01:55:56 2016 +0100
again
commit 6b7add4815e9c99d1f3f44c03cea58339b408f4d
Author: Natanael Arndt <arndt@informatik.uni-leipzig.de>
Date: Fri Dec 16 01:49:44 2016 +0100
Hallo Git
# PWD=~/git-tutorial/repo
$ git remote add gitlab ifigit@git.informatik.uni-leipzig.de:arndt/git-tutorial.git
$ git remote -v
gitlab ifigit@git.informatik.uni-leipzig.de:arndt/git-tutorial.git (fetch)
gitlab ifigit@git.informatik.uni-leipzig.de:arndt/git-tutorial.git (push)
$ git push --set-upstream gitlab master
Zähle Objekte: 6, Fertig.
Delta compression using up to 4 threads.
Komprimiere Objekte: 100% (2/2), Fertig.
Schreibe Objekte: 100% (6/6), 442 bytes | 0 bytes/s, Fertig.
Total 6 (delta 0), reused 0 (delta 0)
To ifigit@git.informatik.uni-leipzig.de:arndt/git-tutorial.git
* [new branch] master -> master
--set-upstream bzw. -u ist nur einmal notwendig, um den Branch dem remote Branch zuzuordnen. Alternativ git branch --set-upstream-to=anderes/master.
$ cd ~/git-tutorial/
$ git clone ifigit@git.….de:arndt/git-tutorial.git local/
Klone nach 'local'...
remote: Zähle Objekte: 6, Fertig.
remote: Komprimiere Objekte: 100% (2/2), Fertig.
remote: Total 6 (delta 0), reused 0 (delta 0)
Empfange Objekte: 100% (6/6), Fertig.
Prüfe Konnektivität... Fertig.
$ cd local/
$ ls -a
. .. file.txt .git
$ git remote -v
origin ifigit@git.informatik.uni-leipzig.de:arndt/git-tutorial.git (fetch)
origin ifigit@git.informatik.uni-leipzig.de:arndt/git-tutorial.git (push)
$ # PWD=~/git-tutorial/local
$ echo "Beitrag" > file2.txt
$ git status
Auf Branch master
Ihr Branch ist auf dem selben Stand wie 'origin/master'.
Unbeobachtete Dateien:
(benutzen Sie "git add <Datei>...", um die Änderungen zum
Commit vorzumerken)
file2.txt
nichts zum Commit vorgemerkt, aber es gibt unbeobachtete Dateien
(benutzen Sie "git add" zum Beobachten)
$ # PWD=~/git-tutorial/local
$ git add file2.txt
$ git status
Auf Branch master
Ihr Branch ist auf dem selben Stand wie 'origin/master'.
zum Commit vorgemerkte Änderungen:
(benutzen Sie "git reset HEAD <Datei>..." zum Entfernen aus
der Staging-Area)
neue Datei: file2.txt
$ # PWD=~/git-tutorial/local
$ git commit -m "Ein neuer Beitrag"
[master a7155b7] ein neuer Beitrag
1 file changed, 1 insertion(+)
create mode 100644 file2.txt
$ git status
Auf Branch master
Ihr Branch ist vor 'origin/master' um 1 Commit.
(benutzen Sie "git push", um lokale Commits zu publizieren)
nichts zu committen, Arbeitsverzeichnis unverändert
$ # PWD=~/git-tutorial/local
$ git push
Zähle Objekte: 3, Fertig.
Delta compression using up to 4 threads.
Komprimiere Objekte: 100% (2/2), Fertig.
Schreibe Objekte: 100% (3/3), 280 bytes | 0 bytes/s, Fertig.
Total 3 (delta 0), reused 0 (delta 0)
To ifigit@git.informatik.uni-leipzig.de:arndt/git-tutorial.git
0a777cb..a7155b7 master -> master
$ git status
$ cd ~/git-tutorial/repo/
$ ls -a
. .. file.txt .git
$ git fetch gitlab
remote: Zähle Objekte: 3, Fertig.
remote: Komprimiere Objekte: 100% (2/2), Fertig.
remote: Total 3 (delta 0), reused 0 (delta 0)
Entpacke Objekte: 100% (3/3), Fertig.
Von ifigit@git.informatik.uni-leipzig.de:arndt/git-tutorial.git
0a777cb..a7155b7 master -> gitlab/master
$ ls -a
. .. file.txt .git
$ cd ~/git-tutorial/repo/
$ ls -a
. .. file.txt .git
$ git fetch gitlab
remote: Zähle Objekte: 3, Fertig.
remote: Komprimiere Objekte: 100% (2/2), Fertig.
remote: Total 3 (delta 0), reused 0 (delta 0)
Entpacke Objekte: 100% (3/3), Fertig.
Von ifigit@git.informatik.uni-leipzig.de:arndt/git-tutorial.git
0a777cb..a7155b7 master -> gitlab/master
$ ls -a
. .. file.txt .git
$ # PWD=~/git-tutorial/repo
$ git status
Auf Branch master
Ihr Branch ist zu 'gitlab/master' um 1 Commit hinterher, und kann
vorgespult werden.
(benutzen Sie "git pull", um Ihren lokalen Branch zu
aktualisieren)
nichts zu committen, Arbeitsverzeichnis unverändert
$ git merge gitlab/master
Aktualisiere 0a777cb..a7155b7
Fast-forward
file2.txt | 1 +
1 file changed, 1 insertion(+)
create mode 100644 file2.txt
$ # PWD=~/git-tutorial/repo
$ git status
Auf Branch master
Ihr Branch ist zu 'gitlab/master' um 1 Commit hinterher, und kann
vorgespult werden.
(benutzen Sie "git pull", um Ihren lokalen Branch zu
aktualisieren)
nichts zu committen, Arbeitsverzeichnis unverändert
$ git merge gitlab/master
Aktualisiere 0a777cb..a7155b7
Fast-forward
file2.txt | 1 +
1 file changed, 1 insertion(+)
create mode 100644 file2.txt
$ # PWD=~/git-tutorial/repo
$ git status
Auf Branch master
Ihr Branch ist auf dem selben Stand wie 'gitlab/master'.
nichts zu committen, Arbeitsverzeichnis unverändert
$ ls -a
. .. file2.txt file.txt .git
$ # PWD=~/git-tutorial/repo
$ git pull
Aktualisiere a7155b7..910e6f9
Fast-forward
file2.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
$ ls -a
. .. file2.txt file.txt .git
$ cd ~/git-tutorial/local/
$ git branch feature
$ git branch
feature
* master
$ echo "beitrag auf master" >> file.txt
$ git add file.txt
$ git commit -m "beitrag auf master"
[master 3ff104e] beitrag auf master
1 file changed, 1 insertion(+)
$ # PWD=~/git-tutorial/local
$ git checkout feature
$ git branch
* feature
master
$ echo "beitrag auf feature" >> file2.txt
$ git add file2.txt
$ git commit -m "beitrag auf feature"
[master 3ff104e] beitrag auf master
1 file changed, 1 insertion(+)
$ # PWD=~/git-tutorial/local
$ git checkout master
$ git branch
feature
* master
$ git merge feature # vim -> :wq
Aktualisiere 3ff104e..85de3a4
Fast-forward
file2.txt | 1 +
1 file changed, 1 insertion(+)
$ tail -n 1 file*
==> file2.txt <==
beitrag auf feature
==> file.txt <==
beitrag auf master
$ cat file.txt
Hallo Git
again
<<<<<<< HEAD
beitrag auf master
konflikt von master
=======
konflikt von feature
>>>>>>> feature
$ vim file.txt
$ cat file.txt
Hallo Git
again
beitrag auf master
konflikt von master und feature behoben
$ git add file.txt
$ git commit
$ cd ~/git-tutorial/local/
$ git push
To /home/natanael/git-tutorial/remote-repo
! [rejected] master -> master (fetch first)
error: Fehler beim Versenden einiger Referenzen nach '/tmp/gituebung/remote-repo'
Hinweis: Aktualisierungen wurden zurückgewiesen, weil das Remote-Repository Commits enthält,
Hinweis: die lokal nicht vorhanden sind. Das wird üblicherweise durch einen "push" von
Hinweis: Commits auf dieselbe Referenz von einem anderen Repository aus verursacht.
Hinweis: Vielleicht müssen Sie die externen Änderungen zusammenzuführen (z.B. 'git pull ...')
Hinweis: bevor Sie erneut "push" ausführen.
Hinweis: Siehe auch die Sektion 'Note about fast-forwards' in 'git push --help'
Hinweis: für weitere Details.
$ git rebase origin/master