Im letzten Artikel Git & Github für Anfänger habe ich erklärt wie du Git & GitHub einrichtest und deine erste Repository anlegst. In diesem Artikel geht es etwas tiefer in die Materie. Du lernst wie du Dateien aus der Datenbank ausschließt, Dateien zwischen den 3 Status wechselst, wie du Dateien temporär bei Seite legst und wie du mit Branches arbeitest.
Dateien aus der Datenbank ausschließen
Um eine Datei dauerhaft aus GIT auszuschließen, musst du eine „.gitignore" Datei anlegen und den Dateipfad dort eintragen. Öffne deinen Editor und lege 2 Dateien an. Zum einen die Datei „.gitignore" und zum anderen eine Datei die du ausschließen möchtest.
In der „.gitignore" Datei „/geheim/geheim.txt" eintragen, um die Datei geheim.txt von der Datenbank auszuschließen.
Wenn du jetzt „git status" in deine Konsole eingibst, siehst du, dass die geheim Dateien nicht angezeigt werden und somit von Git ignoriert werden.
C:\Users\Marc\Desktop\Projekte\boolie\gittut>git status On branch master Your branch is up-to-date with 'origin/master'. Untracked files: (use "git add <file>..." to include in what will be committed) .gitignore nothing added to commit but untracked files present (use "git add" to track) C:\Users\Marc\Desktop\Projekte\boolie\gittut>git add . C:\Users\Marc\Desktop\Projekte\boolie\gittut>git status On branch master Your branch is up-to-date with 'origin/master'. Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: .gitignore C:\Users\Marc\Desktop\Projekte\boolie\gittut>git commit -m "ignoreing secret Files" [master 252281b] ignoreing secret Files 1 file changed, 1 insertion(+) create mode 100644 .gitignore C:\Users\Marc\Desktop\Projekte\boolie\gittut>git push Counting objects: 3, done. Delta compression using up to 4 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 337 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To https://github.com/Snowflame/GitTutorial .git 412ffc4..252281b master -> master
Datei Änderungen rückgängig machen
Mit dem „checkout" Befehl lassen sich Dateien wieder auf den Uhrsprung zurück setzen. Ändere die Datei die Datei README.md, trage eine Textstelle ein. Jetzt gibst du in der Konsole „git checkout README.md" ein, danach wird die Änderung rückgängig gemacht und die Datei ist wieder auf dem Stand des letzten pulls.
C:\Users\Marc\Desktop\Projekte\boolie\gittut>git status On branch master Your branch is up-to-date with 'origin/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") C:\Users\Marc\Desktop\Projekte\boolie\gittut>git checkout README.md C:\Users\Marc\Desktop\Projekte\boolie\gittut>git status On branch master Your branch is up-to-date with 'origin/master'. nothing to commit, working tree clean
Staged Markierung entfernen
Falls du schon eine Datei mit „git add" markiert hast, aber diese doch nicht in den Commit soll, kannst du die Datei mit „git reset DATEI" wieder aus dem staged Modus herausholen. Falls du die Datei bearbeitest und speicherst, wird die Datei automatisch aus dem staged genommen.
C:\Users\Marc\Desktop\Projekte\boolie\gittut>git add README.md C:\Users\Marc\Desktop\Projekte\boolie\gittut>git status On branch master Your branch is up-to-date with 'origin/master'. Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: README.md C:\Users\Marc\Desktop\Projekte\boolie\gittut>git reset README.md Unstaged changes after reset: M README.md C:\Users\Marc\Desktop\Projekte\boolie\gittut>git status On branch master Your branch is up-to-date with 'origin/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")
Stash
Der Stash ist eine Art Zwischenablage, du kannst deine Änderungen in den Stash legen und z.B. ein pull machen. Nach dem pull machst du ein apply und deine Änderungen sind wieder da. Schreibe eine Zeile in die README.md.
Jetzt gibst du in der Konsole „git stash" ein.
C:\Users\Marc\Desktop\Projekte\boolie\gittut>git status On branch master Your branch is up-to-date with 'origin/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") C:\Users\Marc\Desktop\Projekte\boolie\gittut>git stash Saved working directory and index state WIP on master: 252281b ignoreing secret Files C:\Users\Marc\Desktop\Projekte\boolie\gittut>git status On branch master Your branch is up-to-date with 'origin/master'. nothing to commit, working tree clean
Bearbeite jetzt die license.txt, schreibe z.B. deinen Namen rein.
Jetzt führe den Befehl „git stash apply" in der Konsole aus.
C:\Users\Marc\Desktop\Projekte\boolie\gittut>git status On branch master Your branch is up-to-date with 'origin/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: license.txt no changes added to commit (use "git add" and/or "git commit -a") C:\Users\Marc\Desktop\Projekte\boolie\gittut>git stash apply On branch master Your branch is up-to-date with 'origin/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 modified: license.txt no changes added to commit (use "git add" and/or "git commit -a")
Jetzt ist die Änderung in der REAME.md wieder da!
Branches
Ein Branch ist eine Sammlung von Commits, die wiederum eine neue Funktion in deiner App darstellen. Sprich jede neue Funktion in deiner App sollte eine eigene Branch besitzen. Wenn Entwickler 1 an der Branch „bezahl Funktion" arbeitet und Entwickler 2 an „Produktauswahl", kommen die beiden sich nicht in die Quere, da die beiden in unterschiedlichen Branches arbeiten. Später werden beide Branches dann merged und ergeben ein Paket aus neuen Funktionen für die App.
Um eine Branch zu erstellen musst du „checkout -b [NAME]" in die Konsole eingeben. Mit dem Befehl erstellst du die Branch und wechselst gleich in die Branch. Mit dem Befehl „git branch" kannst du dir alle Branches anzeigen lassen.
C:\Users\Marc\Desktop\Projekte\boolie\gittut>git checkout -b "README_Info" Switched to a new branch 'README_Info' C:\Users\Marc\Desktop\Projekte\boolie\gittut>git branch * README_Info master
Wenn du jetzt in der Brnach README_Info arbeitest, werden keine Änderungen im master vorgenommen. Ändere jetzt in der REAME.md wieder eine Zeile bzw. füge eine neue Zeile ein.
Schiebe jetzt deine Branch auf den Server. Aber diesmal musst du bei deinem push ein Upstream setzen. „git push -set-upstream origin README_Info" sagt dem Server eine neue Branch wurde erstellt und füge diese auf dem Server hinzu.
C:\Users\Marc\Desktop\Projekte\boolie\gittut>git status On branch README_Info 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") C:\Users\Marc\Desktop\Projekte\boolie\gittut>git add README.md C:\Users\Marc\Desktop\Projekte\boolie\gittut>git commit -m "new working Branch" [README_Info 4ceb2aa] new working Branch 1 file changed, 3 insertions(+) C:\Users\Marc\Desktop\Projekte\boolie\gittut>git push --set-upstream origin README_Info Counting objects: 3, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 416 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To https://github.com/Snowflame/GitTutorial.git * [new branch] README_Info -> README_Info Branch README_Info set up to track remote branch README_Info from origin.
Jetzt zeigt GitHub auch die Branch an, öffne deine Branch und klicke auf „branches".
Du kannst mit dem „git checkout [BRANCHNAME]" Befehl zwischen den Branches wechseln. Wechsel jetzt zurück auf den Master Branch.
C:\Users\Marc\Desktop\Projekte\boolie\gittut>git branch * README_Info master C:\Users\Marc\Desktop\Projekte\boolie\gittut>git checkout master Switched to branch 'master' Your branch is up-to-date with 'origin/master'. C:\Users\Marc\Desktop\Projekte\boolie\gittut>git branch README_Info * master
Jetzt siehst du in deinem Editor, dass die Änderungen weg sind. Aber die Änderungen sind nicht weg, die liegen nur in der anderen Branch.
Branches mergen
Ein merge ist eine Zusammenfügung von 2 Branches, dabei wird der angegebene Branch in den aktuellen Branch eingefügt. Bei Git machst du das mit dem Befehl „git merge [BRANCH]". Wechsle also in den Master Brnach und merge README_Info. Der Befehl sieht dann folgendermaßen aus: „git merge README_Info".
C:\Users\Marc\Desktop\Projekte\boolie\gittut>git merge README_info Updating 323f602..4ceb2aa Fast-forward README.md | 3 +++ 1 file changed, 3 insertions(+)
Fertig, die beiden Branches sind jetzt zusammen gesetzt worden und der master Branch hat den Code vom README_Info mit drin.
Fazit
Wenn du vorher das Anfänger Tutorial gemacht hast und jetzt das Fortgeschrittene Tutorial, könntest du schon in einem Unternehmen, das Git verwendet, arbeiten. Du kannst jetzt: Dateien Ignorieren, Änderungen rückgängig machen, Dateien aus dem Staged Modus nehmen, Dateien zur Seite packen, Branches anlegen und mergen.