Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
|
developer:github [2015/01/21 11:41] hofer [git stash] |
developer:github [2019/08/13 13:48] (aktuell) |
||
|---|---|---|---|
| Zeile 31: | Zeile 31: | ||
| Damit man mit den lokalen Änderungen nicht durcheinander, kommt sollte vorher alles lokale **commited** werden. | Damit man mit den lokalen Änderungen nicht durcheinander, kommt sollte vorher alles lokale **commited** werden. | ||
| + | |||
| + | Falls bereits lokale Änderungen im Master vorhanden sind wird automatisch ein Merge Commit erzeugt. Um das zu verhindern kann <code>git pull --rebase</code> verwendet werden. | ||
| ===== Alternative zu merge commit: git rebase ===== | ===== Alternative zu merge commit: git rebase ===== | ||
| Zeile 60: | Zeile 62: | ||
| </code> | </code> | ||
| - | In diesem Fall wird die gesamte history (alle commits) vom branch in den master mitgenommen. Wenn das nicht gewollt ist, kann man dem merge-Befehl noch den Parameter ''--squash'' mitgeben. Muss dann aber noch einen extra commit durchführen. Git befüllt in diesem Fall die commit message bereits mit allen möglichen Infos. | + | In diesem Fall wird die gesamte history (alle commits) vom branch in den master mitgenommen. Wenn das nicht gewollt ist, kann man dem merge-Befehl noch den Parameter ''%%--%%squash'' mitgeben. Muss dann aber noch einen extra commit durchführen. Git befüllt in diesem Fall die commit message bereits mit allen möglichen Infos. |
| <code> | <code> | ||
| Zeile 68: | Zeile 70: | ||
| git push | git push | ||
| </code> | </code> | ||
| + | |||
| + | Wenn man danach mit dem branch noch weiter arbeiten möchte, muss man den Startpunkt ändern (wo zweigt der branch ab). | ||
| + | |||
| + | <code> | ||
| + | git checkout master | ||
| + | git branch -f mein-feature-branch <letzterCommit> | ||
| + | </code> | ||
| + | |||
| + | Oder branch einfach löschen. | ||
| + | |||
| + | <code> | ||
| + | git branch -D mein-feature-branch | ||
| + | </code> | ||
| + | |||
| + | Soll ein neuer lokaler Branch für alle zur Verfügung stehen, kann dieser mit folgendem Befehl auf Github gepusht werden | ||
| + | <code> | ||
| + | git push origin mein-feature-branch | ||
| + | </code> | ||
| + | |||
| + | Damit danach ein status/pull/push korrekt funktioniert muss noch folgender Befehl ausgeführt werden | ||
| + | <code> | ||
| + | git branch --set-upstream-to=origin/mein-feature-branch mein-feature-branch | ||
| + | </code> | ||
| + | |||
| ===== git checkout (-b) nameDesBranches ===== | ===== git checkout (-b) nameDesBranches ===== | ||
| Zeile 131: | Zeile 157: | ||
| Vom hash reichen also auch die ersten 7 Stellen aus. | Vom hash reichen also auch die ersten 7 Stellen aus. | ||
| + | ===== Working Copy zurücksetzen ===== | ||
| + | Wenn bereits lokale Commits vorhanden sind die verworfen werden sollen kann der aktuelle stand des Remote repositorys geholt werden mit: | ||
| + | <code> | ||
| + | Auf Branch ci | ||
| + | Ihr Branch ist vor 'origin/ci' um 30 Commits. | ||
| + | (benutzen Sie "git push", um lokale Commits zu publizieren) | ||
| + | nichts zu committen, Arbeitsverzeichnis unverändert | ||
| + | </code> | ||
| + | Diese können mit folgenden Befehl verworfen werden: | ||
| + | <code> | ||
| + | git reset --hard origin/ci | ||
| + | </code> | ||
| + | wobei ci der name des Remote Branch ist. | ||
| + | |||
| + | ===== Branch Merge ===== | ||
| + | Wenn die Entwicklung in einem eigenen Branch stattfindet können die Änderungen vom Master in den Branch übernommen werden damit der Branch wieder am aktuellen Stand ist.\\ | ||
| + | 1. Schritt: Master aktualisieren | ||
| + | <code> | ||
| + | git checkout master | ||
| + | git pull | ||
| + | </code> | ||
| + | 2. Schritt: Branch aktualisieren | ||
| + | <code> | ||
| + | git checkout ci | ||
| + | git pull | ||
| + | </code> | ||
| + | 3. Schritt: Änderungen vom Master in den Branch mergen | ||
| + | (Man muss sich im Branch befinden) | ||
| + | <code> | ||
| + | git merge master | ||
| + | </code> | ||
| + | |||
| + | Wenn es zu Konflikten kommt müssen diese aufgelöst werden. | ||
| + | Mit 'git status' bekommt man eine Übersicht über den aktuellen Stand. | ||
| + | \\ | ||
| + | Soll bei einem Konflikt die Version des Branches übernommen werden kann das mit folgendem Befehl gemacht werden: | ||
| + | <code> | ||
| + | git checkout --ours datei.php | ||
| + | </code> | ||
| + | Soll stattdessen die Version aus dem Master übernommen werden: | ||
| + | <code> | ||
| + | git checkout --theirs datei.php | ||
| + | </code> | ||
| + | Anschließend wird die korrigierte Datei hinzugefügt: | ||
| + | <code> | ||
| + | git add datei.php | ||
| + | </code> | ||
| + | Wenn alle Konflikte behoben sind werden die Änderungen commited: | ||
| + | <code> | ||
| + | git commit | ||
| + | </code> | ||
| + | Und nach dem testen gepusht: | ||
| + | <code> | ||
| + | git push | ||
| + | </code> | ||
| ===== Andere interessante Befehle ===== | ===== Andere interessante Befehle ===== | ||
| Zeile 137: | Zeile 218: | ||
| git rm index.php</code> | git rm index.php</code> | ||
| + | ===== Branch auf Commandline anzeigen ===== | ||
| + | Um den aktuellen Branch direkt im Prompt auf der Commandline anzuzeigen kann die Variable %%$(__git_ps1)%% in der Datei ~/.bashrc gesetzt werden: | ||
| + | <code> | ||
| + | PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\[\033[0;32m\]$(__git_ps1)\[\033[0m\]\$ ' | ||
| + | </code> | ||
| + | Um zusätzlich anzuzeigen ob es dort Änderungen gibt kann folgende Zeile hinzugefügt werden: | ||
| + | <code> | ||
| + | export GIT_PS1_SHOWDIRTYSTATE=1 | ||
| + | </code> | ||
| + | ==== Alias ==== | ||
| + | In der Datei ~/.gitconfig können Alias Befehle gesetzt werden um zB formatierte Logeinträge leichter anzuzeigen: | ||
| + | <code> | ||
| + | [alias] | ||
| + | ci = commit | ||
| + | lc = log ORIG_HEAD.. --stat --no-merges | ||
| + | st = status | ||
| + | co = checkout | ||
| + | lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative | ||
| + | </code> | ||
| ===== Workflow ===== | ===== Workflow ===== | ||
| Zeile 143: | Zeile 243: | ||
| Die Grafiken in der [[http://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging|git doku]] sagen mehr als 1000 Worte. Und [[https://guides.github.com/introduction/flow/index.html|der Guide]] schaut auch übersichtlich aus. | Die Grafiken in der [[http://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging|git doku]] sagen mehr als 1000 Worte. Und [[https://guides.github.com/introduction/flow/index.html|der Guide]] schaut auch übersichtlich aus. | ||
| + | |||
| + | ===== Aktuelle git Version installieren ===== | ||
| + | |||
| + | Für debian gibt es nur relativ alte git Versionen (max. 1.9 über backport). Aktuell sind sie aber bei 2.3.0. Die Version muss man selbst kompilieren. Und zwar so: | ||
| + | |||
| + | <code> | ||
| + | sudo apt-get install autoconf libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev | ||
| + | sudo apt-get remove git | ||
| + | wget https://www.kernel.org/pub/software/scm/git/git-X.Y.Z.tar.gz | ||
| + | tar -zxf git-X.Y.Z.tar.gz | ||
| + | cd git-X.Y.Z | ||
| + | make configure | ||
| + | ./configure --prefix=/usr | ||
| + | make all doc info | ||
| + | sudo make install install-doc install-html install-info | ||
| + | cd .. | ||
| + | rm -r git-X.Y.Z | ||
| + | </code> | ||
| + | |||
| + | Siehe auch [[http://git-scm.com/book/en/v2/Getting-Started-Installing-Git|Installing Git]] | ||
| + | |||
| + | ===== git url alias ===== | ||
| + | |||
| + | Um zum Beispiel https URLs auf ssh URLs umzuschreiben kann man in ''~/.gitconfig'' folgenden Eintrag machen: | ||
| + | |||
| + | <code> | ||
| + | [url "git://git@github.com:"] | ||
| + | insteadOf = https://github.com/ | ||
| + | </code> | ||
| + | |||
| + | ''<nowiki>https://github.com/</nowiki>'' wird jetzt immer durch ''<nowiki>git://git@github.com:</nowiki>'' ersetzt. | ||
| + | |||
| + | Damit dieses Alias bei ''git submodule'' greift, müssen vorher in ''.git/config'' die submodule gelöscht werden. Beispiel: | ||
| + | |||
| + | <code> | ||
| + | [submodule "submodules/tablesorter"] | ||
| + | url = git@github.com:christianbach/tablesorter.git | ||
| + | </code> | ||
| + | |||
| + | Diesen Eintrag entfernen. Den Ordner samt submodule (sicherheitshalber) löschen. Und dann | ||
| + | |||
| + | <code> | ||
| + | git submodule init | ||
| + | git submodule update | ||
| + | </code> | ||
| + | |||
| + | ''.git/config'' kontrollieren, hier sollten jetzt die ssh URLs eingetragen sein. | ||