Git kennenlernen mit Bitbucket Cloud

Erfahre, wie du Änderungen in Git mit Bitbucket Cloud rückgängig machen kannst

Ziel

Erfahre, wie du Änderungen auf deinem lokalen Rechner und einem Bitbucket Cloud-Repository rückgängig machst, während du mit anderen zusammenarbeitest.

Übersicht zur Aufgabe

Befehle, die in diesem Tutorial behandelt werden: git revert, git reset, git log und git status

 

Zeit Zielpublikum Voraussetzungen

40 Minuten

Dieses Tutorial setzt voraus, dass dir die folgenden git-Befehle bekannt sind:

git clone, git commit, git pull und git push
Du hast Git installiert.
    Du hast einen Bitbucket-Account.

Jeder macht mal Fehler und nicht jeder Push-Vorgang ist perfekt. Deshalb zeigt dir dieses Tutorial, wie du die gängigsten git-Funktionen für das sichere Rückgängigmachen von Änderungen verwendest.

Dieses Tutorial setzt voraus, dass dir die folgenden git-Befehle bekannt sind:

Wenn du diese Befehle nicht kennst, können wir dir dabei helfen, git mit Bitbucket Cloud kennenzulernen. Danach kannst du zu diesem Tutorial zurückkehren und erfahren, wie du Änderungen rückgängig machst. Diese git-Befehle sind auf Windows- oder Unix-Umgebungen anwendbar. Das Tutorial nutzt Unix-Befehlszeilentools für Anweisungen zur Navigation im Dateisystem.

Rückgängigmachen von Änderungen auf deinem lokalen Rechner

Wenn die Änderung, die du rückgängig machen möchtest, auf deinem lokalen System ist und noch nicht auf ein Remote-Repository gepusht wurde, gibt es im Wesentlichen zwei Wege, um sie rückgängig zu machen:

Befehl Definitionen

git revert

Ein Befehl zum Rückgängigmachen, aber kein herkömmlicher Rückgängig-Vorgang. Anstatt den Commit zu entfernen wird ermittelt, wie Änderungen im Commit umgekehrt werden können. Danach wird einem neuen Commit der umgekehrte Inhalt angefügt. So wird verhindert, dass der Verlauf von Git verkürzt wird, was für die Integrität deines Überprüfungsverlaufs und für eine zuverlässige Zusammenarbeit wichtig ist.

git reset

Ein vielseitiger git-Befehl zum Rückgängigmachen von Änderungen. Der git reset-Befehl bietet leistungsstarke Optionen, wir werden für dieses Tutorial aber nur die folgenden Rücksetz-Modi nutzen:

  • --soft: Setzt nur den HEAD auf den ausgewählten Commit zurück. Funktioniert ähnlich wie git checkout <commit #>, erstellt aber kein getrenntes Head-Element.
  • --mixed: Setzt den HEAD auf den Commit zurück, den du aus dem Verlauf ausgewählt hast, und macht Änderungen im Index rückgängig.
  • --hard: Setzt den HEAD auf den Commit zurück, den du aus dem Verlauf ausgewählt hast, und macht Änderungen im Index und in deinem Arbeitsverzeichnis rückgängig. Im Rahmen dieses Tutorials werden wir keinen "hard reset" versuchen.

Eine umfassende Beschreibung zur Funktionsweise von git reset findest du auf git-scm.com unter Git Tools – Reset entzaubert.

 

Im weiteren Verlauf des Tutorials wirst du einige andere git-Befehle kennenlernen, bei denen es um das Rückgängigmachen von Änderungen geht. Fangen wir also an.

Ein Repository forken

Erstellen wir zunächst ein einzigartiges Repository mit dem Code des Originals. Dieser Vorgang wird als Forking eines Repositorys bezeichnet. Forking ist ein erweiterter git-Prozess, der dann aktiviert wird, wenn ein freigegebenes Repository mit einem Drittanbieter-Hosting-Service wie Bitbucket gehostet wird.

  1. Klicke auf die folgende URL oder gib sie ein: https://bitbucket.org/atlassian/tutorial-documentation-tests/commits/all
  2. Klicke auf das +-Symbol auf der linken Seitenleiste und wähle dann Fork this repository (Dieses Repository forken) aus. Prüfe den Dialog und klicke auf Fork repository (Repository forken).
  3. Dadurch solltest du zur Übersicht über das neue Repository weitergeleitet werden.
  4. Klicke auf das "+"-Symbol und wähle Clone this repository (Dieses Repository klonen) aus.
  5. Klone das Repository auf deinem Computer.
  6. Navigiere zu dem Verzeichnis, das das geklonte Repository enthält.

Da du jetzt ein Repository mit Code und einen echten Verlauf auf deinem lokalen System hast, kannst du mit der Rückgängigmachung von Änderungen beginnen.

Auffinden von Änderungen auf deinem lokalen System

Du musst die Änderung, die du rückgängig machen möchtest, finden und referenzieren können. Hierzu durchsuchst du die Commit-Benutzeroberfläche in Bitbucket. Alternativ kannst du bestimmte Änderungen mit diversen Befehlszeilentools suchen.

git status

Git status gibt den Status deines Arbeitsverzeichnisses (dem Speicherort des Repositorys auf deinem lokalen System) und die Staging-Umgebung aus (wo du eine Reihe von Änderungen vorbereitest, um sie dem Projektverlauf hinzuzufügen). Der Befehl zeigt Dateien an, die Änderungen enthalten, und ob diese Änderungen der Staging-Umgebung hinzugefügt wurden. Führen wir nun git status aus, um den aktuellen Status des Repositorys zu untersuchen.

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean

Die hier dargestellte Ausgabe von git status zeigt, dass beim Master-Branch alles auf dem aktuellen Stand ist und es keine ausstehenden Änderungen gibt, die committet werden müssen. Im nächsten Beispiel werden wir einige Änderungen am Repository vornehmen und es im Status "Ausstehende Änderungen" untersuchen. Das bedeutet, dass es Änderungen an Dateien in dem Repository auf deinem lokalen System gibt, die du nicht für das Hinzufügen zum Projektverlauf vorbereitet (oder gestagt) hast.

Öffne für das nächste Beispiel zunächst die Datei myquote2.html. Nimm einige Änderungen an den Inhalten von myquote2.html vor und speichere und beende die Datei. Wir führen anschließend noch einmal git status aus, um das Repository in diesem Status zu untersuchen.

$ 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: myquote2.html
 
no changes added to commit (use "git add" and/or "git commit -a")
--

Die hier dargestellte Ausgabe zeigt, dass das Repository ausstehende Änderungen an myquote2.html hat. Und das ist auch gut so. Falls die Änderung, die du rückgängig machen möchtest, wie im obigen Beispiel gezeigt noch nicht zur Staging-Umgebung hinzugefügt wurde, musst du lediglich die Datei bearbeiten und weiter machen wie gehabt. Git beginnt erst mit der Nachverfolgung einer Änderung, wenn du sie zum Staging-Bereich hinzufügst und dann zum Projektverlauf committest.

Kommen wir jetzt zum Rückgängigmachen der Änderungen, die wir an myquote2.html vorgenommen haben. Wir haben es hier mit einem vereinfachten Beispiel mit minimalen Änderungen zu tun, deshalb stehen uns dafür zwei Methoden zur Verfügung.  Wenn wir git checkout myquote2.html ausführen, wird das Repository myquote2.html auf die zuvor committete Version zurückgesetzt. Alternativ können wir git reset --hard ausführen, wodurch das gesamte Repository auf den letzten Commit zurückgesetzt wird.

git log

Der Befehl git log wird verwendet, um den Projektverlauf aufzurufen, ihn zu filtern und nach bestimmten Änderungen zu suchen. Mit git status kannst du das Arbeitsverzeichnis und die Staging-Umgebung anzeigen, während git log ausschließlich auf den Commit-Verlauf beschränkt ist.

Dasselbe Protokoll für Commit-Verläufe findet sich auch in der Bitbucket-Benutzeroberfläche, wenn in einem Repository auf die Ansicht "Commits" zugegriffen wird. Die Ansicht mit Commits für unser Demo-Repository findest du auf: https://bitbucket.org/dans9190/tutorial-documentation-tests/commits/all. Diese Ansicht enthält eine ähnliche Ausgabe wie das git log-Befehlszeilentool. Dieses kann für die Suche und Identifizierung von Commits verwendet werden, die rückgängig gemacht werden sollen.

Im folgenden Beispiel siehst du verschiedene Dinge im Verlauf, aber jede Änderung ist im Grunde ein Commit, deshalb müssen wir diesen suchen und rückgängig machen.

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.

nothing to commit, working tree clean

$ git log

commit 1f08a70e28d84d5034a8076db9103f22ec2e982c
Author: Daniel Stevens <dstevens@atlassian.com>
Date:   Wed Feb 7 17:06:50 2018 +0000

    Initial Bitbucket Pipelines configuration

commit 52f823ca251a132225dd1cc18ad768de8d336e84
Author: Daniel Stevens <dstevens@atlassian.com>
Date:   Fri Sep 30 15:50:58 2016 -0700

    repeated quote to show how a change moves through the process

commit 4801b87c2147dce83f1bf31acfcffa6cb1d7e0a5
Merge: 1a6a403 3b29606
Author: Dan Stevens [Atlassian] <dstevens@atlassian.com>
Date:   Fri Jul 29 18:45:34 2016 +0000

    Merged in changes (pull request #6)

    Changes

Sehen wir uns einen der Commits in der Liste einmal etwas genauer ein:

commit 52f823ca251a132225dd1cc18ad768de8d336e84
Author: Daniel Stevens <dstevens@atlassian.com>
Date:   Fri Sep 30 15:50:58 2016 -0700
 
    repeated quote to show how a change moves through the process

Du kannst erkennen, dass jede Commit-Nachricht aus vier Elementen besteht:

Element Beschreibung

Commit-Hash

Eine alphanumerische Zeichenfolge (mit SHA-1 verschlüsselt), die eine spezifische Änderung identifiziert

Autor

Die Person, die die Änderung committet hat

Datum

Das Datum, an dem die Änderung zum Projekt committet wurde

Commit-Nachricht

Eine Textzeichenfolge, die die Änderung(en) beschreibt.

Profitipp: Schreibe kurze, anschauliche Commit-Nachrichten, um ein harmonischeres Arbeits-Repository für alle zu erstellen.


 

 

Auffinden eines spezifischen Commits

Die Änderung, die du rückgängig machen möchtest, liegt sehr wahrscheinlich etwas weiter zurück im Projektverlauf, der ziemlich umfangreich sein kann. Deshalb lernen wir einige einfache Vorgehensweisen mit git log, mit denen es möglich ist, eine bestimmte Änderung zu finden.

  1. Gehe zu deinem Terminalfenster und navigiere mit dem Befehl cd (change directory; Verzeichnis ändern) zur obersten Ebene deines lokalen Repositorys.
$ cd ~/repos/tutorial-documentation-tests/

Gib den Befehl git log --oneline ein. Durch Hinzufügen des Parameters --oneline wird jeder Commit auf einer eigenen Zeile angezeigt, damit du in deinem Terminal mehr vom Verlauf siehst.

Durch Drücken auf die Taste q kannst du jederzeit das Commit-Protokoll verlassen und zur Eingabeaufforderung zurückkehren.

Das Ergebnis sollte so ähnlich wie im folgenden Beispiel aussehen:

$ git log --oneline
1f08a70 (HEAD -> master, origin/master, origin/HEAD) Initial Bitbucket Pipelines configuration
52f823c repeated quote to show how a change moves through the process
4801b87 Merged in changes (pull request #6)
1a6a403 myquote edited online with Bitbucket
3b29606 (origin/changes) myquote2.html edited online with Bitbucket
8b236d9 myquote edited online with Bitbucket
235b9a7 testing prs
c5826da more changes
...
  1. Drücke die Taste q, um zur Eingabeaufforderung zurückzukehren.
  2. Finde den Commit mit dem Hash c5826da und weitere Änderungen in der Liste, die nach dem Befehl git log ausgegeben wurde. Irgendwer hat keine beschreibende Commit-Nachricht geschrieben, deshalb müssen wir selbst herausfinden, ob er die benötigten Änderungen enthält.
  3. Hebe den Commit-Hash c5826da hervor und kopiere ihn aus den git log-Ergebnissen in dein Terminalfenster.
  4. Gib git show ein und füge den Commit-Hash, den du kopiert hast, ein bzw. übertrage ihn und drücke die Eingabetaste. Daraufhin solltest du in etwa Folgendes sehen:
$git show c5826daeb6ee3fd89e63ce35fc9f3594fe243605
commit c5826daeb6ee3fd89e63ce35fc9f3594fe243605
Author: Daniel Stevens <dstevens@atlassian.com>
Date:   Tue Sep 8 13:50:23 2015 -0700

    more changes

diff --git a/README.md b/README.md
index bdaee88..6bb2629 100644
--- a/README.md
+++ b/README.md
@@ -11,12 +11,7 @@ This README would normally document whatever steps are necessary to get your app
 ### How do I get set up? ###

 * Summary of set up
-* Configuration
-* Dependencies
-* Database configuration
-* How to run tests
-* Deployment instructions
-* more stuff and things
:

Die Aufforderung unten wird immer weiter ausgefüllt, bis die gesamte Änderung angezeigt wird. Drücke q, um zur Eingabeaufforderung zu wechseln.

Filtern von git log für die Suche nach einem spezifischen Commit

Du kannst die Ausgabe von git log mit einer der folgenden Erweiterungen filtern und anpassen:

Filter Funktionsweise Beispiel-Befehl Ausgabe
-<n>

Beschränkt die Anzahl der angezeigten Commits.

git log -10

Die 10 neuesten Commits im Verlauf

--after

--before

Beschränkt die Anzahl der Commits auf den angegebenen Zeitrahmen.

Du kannst auch Folgendes verwenden: --after "yyyy-mm-dd" --before "yyyy-mm-dd"

git log --after 2017-07-04

Alle Commits nach dem 4. Juli 2017

--author="name"

Führt alle Commits auf, deren Autor diesen Namen hat.

git log --author="Alana"

Alle Commits, bei denen als Autorenname "Alana" im Namensfeld steht

--grep="message string"

Gibt Commits mit einer Commit-Nachricht aus, die zur eingegebenen Zeichenfolge passt.

git log --grep="HOT-"

Alle Commits, die HOT- als Textzeichenfolge in ihren Nachrichten enthalten

 

Dies war ein sehr kurzer Überblick über den git log-Befehl. Wenn dir die Arbeit damit gefällt, solltest du dir unbedingt das git log-Tutorial für Fortgeschrittene ansehen.

Rückgängigmachen von Änderungen mit git reset

Für den Anfang machen wir den letzten Commit im Verlauf rückgängig. In diesem Fall gehen wir davon aus, dass du die CI/CD-Pipelines von Bitbucket gerade aktiviert und dann festgestellt hast, dass das Skript nicht ganz in Ordnung ist.

  1. Gib git log --oneline in dein Terminalfenster ein.
  2. Kopiere den Commit-Hash für den zweiten Commit in das Protokoll: 52f823c und drücke dann q, um das Protokoll zu verlassen.
  3. Gib git reset --soft 52f823c im Terminalfenster ein. Wenn die Eingabe erfolgreich war, sollte der Befehl im Hintergrund ausgeführt werden.  Das war's, du hast die erste Änderung rückgängig gemacht. Sehen wir uns nun das Ergebnis dieser Aktion an.
  4. Gib git status im Terminalfenster ein, dann wird der Commit als rückgängig gemacht angezeigt und ist jetzt eine nicht committete Änderung. Dies sollte in etwa so aussehen:
$ git status
On branch master
Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded.
  (use "git pull" to update your local branch)
 
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
 
    new file:   bitbucket-pipelines.yml
  1. Gib git log --oneline in dein Terminalfenster ein. Daraufhin solltest du in etwa Folgendes sehen:
$ git log --oneline
52f823c repeated quote to show how a change moves through the process
4801b87 Merged in changes (pull request #6)
1a6a403 myquote edited online with Bitbucket
3b29606 (origin/changes) myquote2.html edited online with Bitbucket
8b236d9 myquote edited online with Bitbucket
235b9a7 testing prs
c5826da more changes
43a87f4 remivng
d5c4c62 a few small changes
23a7476 Merged in new-feature2 (pull request #3)
5cc4e1e add a commit message
cbbb5d6 trying a thing
438f956 adding section for permissions and cleaning up some formatting
23251c1 updated snipptes.xml organization into resources. other files misc changes
3f630f8 Adding file to track changes
...
  1. Du kannst erkennen, dass der neue HEAD des Branch der Commit 52f823c ist, und das ist genau das, was du wolltest.
  2. Drücke q, um das Protokoll zu verlassen. Lasse das Terminalfenster geöffnet, damit wir nach dieser einfachen Zurücksetzung etwas Komplexeres ausprobieren können.

Rückgängigmachen von mehreren Änderungen mit git reset

Nehmen wir einmal an, dass der Pull-Request Nr. 6 (4801b87) überarbeitet werden muss und du einen sauberen Verlauf haben willst. Deshalb setzt du den HEAD auf Commit 1a6a403 zurück, verwendest dieses Mal aber den Befehl git reset.

  1. Gib git log --online ein.
  2. Kopiere den Commit-Hash 1a6a403 (die Datei "myquote", die online mit Bitbucket bearbeitet wurde). Dabei handelt es sich um den Commit unterhalb des Pull-Request Nr. 6, der die Änderungen enthält, die wir rückgängig machen möchten.
  3. Gib git reset 1a6a403 im Terminalfenster ein. Die Ausgabe sollte wie folgt aussehen:
$ git reset 1a6a403
Unstaged changes after reset:
M README.md
M myquote2.html

Du kannst erkennen, dass die Änderungen jetzt den Status "nicht committet" haben. Das bedeutet, dass wir mehrere Änderungen sowohl aus dem Verlauf des Projekts als auch der Staging-Umgebung entfernt haben.

  1. Gib git status im Terminalfenster ein. Die Ausgabe sollte wie folgt aussehen:

$ git status
On branch master
Your branch is behind 'origin/master' by 6 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)
 
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:   myquote2.html
 
Untracked files:
  (use "git add <file>..." to include in what will be committed)
 
    bitbucket-pipelines.yml
 
no changes added to commit (use "git add" and/or "git commit -a")

Du kannst erkennen, dass die erste von uns rückgängig gemachte Änderung (die Datei bitbucket-pipelines.yml) von git überhaupt nicht mehr verfolgt wird. Das liegt daran, dass der Aufruf von git reset Änderungen sowohl aus dem Head des Branch als auch aus der Nachverfolgungs- und Indexumgebung von git entfernt. Der zugrundeliegende Prozess ist etwas komplexer, weshalb wir ihn an dieser Stelle nicht abdecken können. Du kannst dich aber im Tutorial zu git reset weiter in das Thema einlesen.

  1. Gib git log --oneline in dein Terminalfenster ein.
1a6a403 myquote edited online with Bitbucket
8b236d9 myquote edited online with Bitbucket
43a87f4 remivng
d5c4c62 a few small changes
23a7476 Merged in new-feature2 (pull request #3)
5cc4e1e add a commit message
cbbb5d6 trying a thing
438f956 adding section for permissions and cleaning up some formatting
23251c1 updated snipptes.xml organization into resources. other files misc changes
3f630f8 Adding file to track changes
e52470d README.md edited online with Bitbucket
e2fad94 README.md edited online with Bitbucket
592f84f Merge branch 'master' into new-feature2 Merge branch  especially if it merges an updated upstream into a topic branch.
7d0bab8 added a line
879f965 adding to the quote file
8994332 Merged in HOT-235 (pull request #2)
b4a0b43 removed sarcastic remarks because they violate policy.
b5f5199 myquote2.html created online with Bitbucket
b851618 adding my first file
5b43509 writing and using tests

Die Protokollausgabe zeigt jetzt, dass der Commit-Verlauf ebenfalls geändert wurde und mit dem Commit 1a6a403 beginnt. Zu Demonstrationszwecken nehmen wir an, dass wir jetzt die eben durchgeführte Zurücksetzung wieder rückgängig machen wollen. Nach einiger Überlegung sind wir zu dem Schluss gekommen, dass wir die Inhalte von Pull-Request Nr. 6 doch behalten wollen.  

Pushen von Zurücksetzungen zu Bitbucket

Git resets sind eine der wenigen Rücksetzmethoden, die git bietet. Zurücksetzungen werden im Allgemeinen als unsichere Option für das Rückgängigmachen von Änderungen betrachtet. Sie sind akzeptabel, wenn man lokal an isoliertem Code arbeitet, werden aber riskant, wenn dieser mit Teammitgliedern geteilt wird.

Um einen Branch, der zurückgesetzt wurde, für ein Remote-Team freizugeben, ist ein "erzwungener Push" erforderlich. Dieser wird durch den Befehl git push -f initiiert. Ein erzwungener Push macht jeglichen Verlauf auf dem Branch zunichte, der nach dem Push-Zeitpunkt erstellt wurde.

Ein Beispiel für dieses "unsichere" Szenario folgt hier:

  • Entwickler A hat an einem Branch für die Entwicklung eines neuen Features gearbeitet.
  • Entwickler B hat am selben Branch gearbeitet, um ein separates Feature zu entwickeln.
  • Entwickler B entscheidet sich, den Branch auf einen früheren Status zurückzusetzen, bevor Entwickler A und B mit der Arbeit daran begonnen haben.
  • Entwickler B führt einen erzwungenen Push des zurückgesetzten Branches auf das Remote-Repository durch.
  • Entwickler A pullt den Branch, um Aktualisierungen zu erhalten. Während dieses Vorgangs empfängt Entwickler A die erzwungene Aktualisierung. Dadurch wird der lokale Branch von Entwickler A auf einen Status zurückversetzt, bevor Arbeiten am Feature abgeschlossen waren, und alle Commits gehen verloren.

Rückgängigmachen von git reset

Bisher haben wir git commit-Sha-Hashes an git reset übergeben. In der git log-Ausgabe fehlen jetzt Commits, die wir zurückgesetzt haben. Wie bekommen wir diese zurück? Git löscht Commits niemals vollständig, es sei denn, sie wurden von Pointern getrennt, die auf sie verweisen. Darüber hinaus speichert git ein separates Protokoll namens "the reflog" zu allen Referenzbewegungen ab. Dieses können wir untersuchen, indem wir git reflog ausführen.

1a6a403 HEAD@{0}: reset: moving to 1a6a403
1f08a70 HEAD@{1}: reset: moving to origin/master
1f08a70 HEAD@{2}: clone: from git@bitbucket.org:dans9190/tutorial-documentation-tests.git

Die von git reflog sollte bei dir ähnlich wie oben aussehen. Du kannst den Verlauf von Aktionen im Repository anzeigen. Die oberste Zeile ist eine Referenz auf die Zurücksetzung, die wir am Pull-Request Nr. 6 durchgeführt haben. Und nun setzen wir die Zurücksetzung zurück, um Pull-Request Nr. 6 wiederherzustellen. Die zweite Spalte dieser reflog-Ausgabe zeigt einen Ref-Pointer zu einer Änderung an, die wir im Repository vorgenommen haben. Hier ist HEAD@{0} eine Referenz auf den reset-Befehl, den wir vorhin ausgeführt haben. Wir möchten diesen reset-Befehl nicht erwidern, deshalb setzen wir das Repository auf HEAD@{1} zurück.

$ git reset --hard HEAD@{1}
HEAD is now at 1f08a70 Initial Bitbucket Pipelines configuration

Sehen wir uns nun den Commit-Verlauf im Repository mit git log --oneline an:

$git log --online
1f08a70 Initial Bitbucket Pipelines configuration
52f823c repeated quote to show how a change moves through the process
4801b87 Merged in changes (pull request #6)
1a6a403 myquote edited online with Bitbucket
3b29606 myquote2.html edited online with Bitbucket
8b236d9 myquote edited online with Bitbucket
235b9a7 testing prs
c5826da more changes
43a87f4 remivng
d5c4c62 a few small changes
23a7476 Merged in new-feature2 (pull request #3)
5cc4e1e add a commit message
cbbb5d6 trying a thing
438f956 adding section for permissions and cleaning up some formatting
23251c1 updated snipptes.xml organization into resources. other files misc changes
3f630f8 Adding file to track changes
e52470d README.md edited online with Bitbucket
e2fad94 README.md edited online with Bitbucket
592f84f Merge branch 'master' into new-feature2 Merge branch  especially if it merges an updated upstream into a topic branch.
7d0bab8 added a line
:

Wir können erkennen, dass der Commit-Verlauf des Repositorys auf die vorherige Version wiederhergestellt wurde, mit der wir experimentiert haben. Man sieht, dass der Commit 4801b87 wiederhergestellt wurde, obwohl es so aussah, als wäre er im ersten Rücksetzvorgang nicht aufgetaucht. Der Befehl git reflog ist ein leistungsstarkes Mittel, um Änderungen im Repository rückgängig zu machen. Lerne auf der Seite git reflog mehr Details zur Verwendung kennen.

git revert

Bei den vorherigen Beispielen sind wir im Verlauf weit zurückgegangen, um Aktionen zum Rückgängigmachen mithilfe von git reset und git reflog durchzuführen. Es gibt in Git jedoch noch eine andere Methode für das Rückgängigmachen, die oft als sicherer betrachtet wird als das Zurücksetzen. Beim Rückgängigmachen mit git revert werden neue Commits erstellt, die eine Umkehrung der spezifizierten Commit-Änderungen enthalten. Diese revert-Commits können dann sicher auf Remote-Repositorys gepusht werden, um sie für andere Entwickler freizugeben.

Im folgenden Abschnitt geht es um die Nutzung von git revert. Hierzu machen wir mit dem Beispiel aus dem vorherigen Abschnitt weiter. Zu Beginn untersuchen wir das Protokoll und suchen einen Commit, den wir rückgängig machen können.

$ git log --online
1f08a70 Initial Bitbucket Pipelines configuration
52f823c repeated quote to show how a change moves through the process
4801b87 Merged in changes (pull request #6)
1a6a403 myquote edited online with Bitbucket
1f08a70 Initial Bitbucket Pipelines configuration
52f823c repeated quote to show how a change moves through the process
4801b87 Merged in changes (pull request #6)
1a6a403 myquote edited online with Bitbucket
3b29606 myquote2.html edited online with Bitbucket
8b236d9 myquote edited online with Bitbucket
235b9a7 testing prs
c5826da more changes
43a87f4 remivng
d5c4c62 a few small changes
23a7476 Merged in new-feature2 (pull request #3)
5cc4e1e add a commit message
cbbb5d6 trying a thing
438f956 adding section for permissions and cleaning up some formatting
23251c1 updated snipptes.xml organization into resources. other files misc changes
3f630f8 Adding file to track changes
e52470d README.md edited online with Bitbucket
e2fad94 README.md edited online with Bitbucket
592f84f Merge branch 'master' into new-feature2 Merge branch  especially if it merges an updated upstream into a topic branch.
7d0bab8 added a line
:

Für dieses Beispiel wählen wir den neuesten Commit 1f08a70 zur Bearbeitung aus. In diesem Szenario wollen wir Bearbeitungen rückgängig machen, die an diesem Commit vorgenommen wurden. Führe Folgendes aus:

$ git revert 1f08a70

Damit wird ein git merge-Workflow gestartet. Git erstellt einen neuen Commit, dessen Inhalt die Umkehrung des Commits ist, der für das Rückgängigmachen ausgewählt wurde. Git öffnet daraufhin einen konfigurierten Texteditor, um zur Eingabe einer neuen Commit-Nachricht aufzufordern. Das Rückgängigmachen mit git revert wird wegen dieses Commit-Workflows als sicherere Methode betrachtet. Die Erstellung von revert-Commits führt zu einem Commit-Verlauf, in dem klar angegeben ist, wann etwas rückgängig gemacht wurde.

Du hast gerade gelernt, wie man Änderungen rückgängig macht!

Glückwunsch! Du hast es geschafft. Du kannst jederzeit zu diesem Tutorial zurückkehren oder dir den Abschnitt "Rückgängigmachen von Änderungen" ansehen, um dich ausführlicher mit dem Thema auseinanderzusetzen. Mach weiter so in Bitbucket!