Git #3 - Anzeigen von alten Commits und Änderungen rückgängig machen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Registriere dich um viele Vorteile zu genießen! Weniger Werbung, bessere Kommunikation und vieles mehr!

  • In diesem Lexikoneintrag lernst du, wie du ältere Commits anzeigen lassen kannst und wie du Änderungen an deiner Repository rückgängig machen kannst.
    Anzeigen von alten Commits

    git checkout

    Das Kommando git checkout, gibt dir drei Möglichkeiten: das Auschecken von Dateien, Commits und Branches.

    Beim Auschecken eines Commits, wird der gesamte Arbeitsordner auf den Status gebracht, an dem er dem angegebenen Commit entsprach. Dies kann dazu verwendet werden, um einen alten Zustand des Projektes zu sehen, ohne den aktuellen Zustand in irgendeiner Weise zu verändern. Beim Auschecken von Dateien, kann eine alte Version von dieser bestimmten Datei angesehen werden, wobei der Rest des Arbeitsordners unberührt bleibt.

    Anwendung

    git checkout master

    Geht zurück in die Branch master.

    git checkout <commit> <file>

    Überprüft eine vorherige Version einer Datei. Dadurch wird die Datei <file>, welche sich im Arbeitsordner befindet, zu einer exakten Kopie dieser Datei zu dem Zeitpunkt des Commits <commit> und in die Staging Area eingefügt.

    git checkout <commit>

    Updatet alle Dateien im Arbeitsorder so, dass sie dem spezifizierten Commit entsprechen. Dadurch wirst du in einen frei stehenden HEAD-Zustand versetzt.

    Beispiel

    Eine alte Version anzeigen

    Dieses Beispiel setzt voraus, dass du etwas austesten wolltest, dir aber nicht sicher bist, ob du es behalten willst oder nicht. Um diese Entscheidung zu vereinfachen, kannst du dir den Status des Projektes vor und nach dem Test ansehen. Zuerst musst du dafür die ID der Version finden, die du dir ansehen willst.

    Quellcode

    1. git log --oneline

    Zum Beispiel könnte deine Projekthistory in etwa so aussehen:

    Quellcode

    1. b7119f2 Continue the test
    2. 872fa7e Make a test
    3. a1e8fb5 Make some important changes to hello.java
    4. 435b61d Create hello.java
    5. 9773e52 Initial import

    Du kannst nun git checkout wie folgt nutzen, um den Commit "Make some important changes to hello.java" anzusehen.

    Quellcode

    1. git checkout a1e8fb5

    Dies bringt deinen Arbeitsordner auf den Stand, auf dem er während des Commits a1e8fb5 war. Du kannst nun Dateien ansehen, das Projekt kompilieren, Tests ausführen und Dateien editieren ohne Angst haben zu müssen, den neuesten Stand des Projektes verlieren zu können. Nichts was du dort tust wird in deiner Repository gespeichert. Um wieder weiter zu programmieren, musst du auf den neuesten Stand des Projekts sein:

    Quellcode

    1. git checkout master

    Das setzt voraus, dass du auf der Branch master programmiert hast.
    Wenn du nun wieder auf deiner Branch master bist, kannst du entweder git revert oder git reset nutzen, um die ungewollten Änderungen rückgängig zu machen.

    Eine Datei auschecken

    Wenn du nur an einer einzelnen Datei interessiert bist, kannst du ebenfalls git checkout nutzen um eine ältere Version der Datei anzusehen. Zum Beispiel, wenn du eine ältere Version der Datei hello.java ansehen willst, kannst du dieses Kommando verwenden:

    Quellcode

    1. git checkout a1e8fb5 hello.java

    Du solltest jedoch daran denken, dass dies deine Repository beeinflusst. Die ältere Version wird auftauchen als "Change to be commited". Wenn du jedoch nicht die Vorgängerversion in deiner aktuellen Repository haben willst, kannst du das einfach wie folgt machen:

    Quellcode

    1. git checkout HEAD hello.java

    Änderungen rückgängig machen

    git revert

    Das Kommando git revert macht einen bereits commiteten Snapshot ungeschehen. Aber anstatt den Commit aus der Projekthistory zu löschen, findet Git heraus, welche Änderungen es zurücksetzten muss und macht einen neuen Commit aus dem resultierenden Inhalt.

    Benutzung

    git revert <commit>

    Generiert einen neuen Commit, der alle Änderungen, die im Commit <commit> eingeführt wurden, ungeschehen macht.

    Beispiel

    Das Beispiel ist eine simple Demonstration von git revert. Es commitet einen neuen Snapshot und macht dann alle Änderungen wieder ungeschehen via git revert.

    Quellcode

    1. # Edit some tracked files
    2. # Commit a snapshot
    3. git commit -m "Make some changes that will be undone"
    4. # Revert the commit again
    5. git revert HEAD

    git reset

    Wenn man git revert als eine "sichere" Methode ansieht, um Änderungen ungeschehen zu machen, dann kann man git reset als unsichere Methode dafür sehen. Wenn du git reset nutzt, gibt es keinen Weg mehr zurück zur originalen Kopie. Dies macht also eine Änderung permanent ungeschehen.

    Benutzung

    git reset <file>

    Löscht eine spezifische Datei aus der Staging Area. Der Arbeitsordner bleibt hierbei jedoch unberührt. Dies nimmt eine Datei wieder von der Staging Area runter, ohne die Änderungen zu überschreiben.

    git reset

    Setzt die Staging Area so zurück, dass sie dem letzten Commit entspricht. Der Arbeitsordner bleibt hierbei jedoch unberührt. Dies nimmt alle Dateien wieder von der Staging Area runter, ohne die Änderungen zu überschreiben.

    git reset --hard

    Setzt die Staging Area so zurück, dass sie dem letzten Commit entspricht. Das Argument --hard sagt Git, dass die Änderungen auch im Arbeitsordner zurückgesetzt werden sollen.

    git reset <commit>

    Setzt die Staging Area so zurück, dass sie dem Commit <commit> entspricht. Der Arbeitsordner bleibt hierbei jedoch unberührt.

    git reset <commit> --hard

    Setzt sowohl die Staging Area als auch den Arbeitsordner auf den Stand während des Commits <commit> zurück. Dies beeinflusst ebenfalls noch nicht commitete Änderungen.

    Beispiel

    Eine Datei aus der Staging Area rausholen

    Das Beispiel setzt voraus, dass du zwei Dateien erstellt hast, die sich hello.java und main.java nennen und die du bereits in deine Repository eingefügt hast.

    Quellcode

    1. # Edit both hello.py and main.py
    2. # Stage everything in the current directory
    3. git add .
    4. # Realize that the changes in hello.java and main.java
    5. # should be committed in different snapshots
    6. # Unstage main.java
    7. git reset main.java
    8. # Commit only hello.java
    9. git commit -m "Make some changes to hello.java"
    10. # Commit main.java in a separate snapshot
    11. git add main.java
    12. git commit -m "Edit main.java"
    Alles anzeigen

    Wie du sehen kannst, kann dir git reset dabei helfen, deine Commits zu organisieren, falls du deine Commits etwas kleinschrittiger machen willst.

    Lokale Commits löschen

    Quellcode

    1. # Create a new file called 'feature.java' and add some code to it
    2. # Commit it to the project history
    3. git add feature.java
    4. git commit -m "Start developing a crazy feature"
    5. # Edit 'feature.java' again and change some other tracked files, too
    6. # Commit another snapshot
    7. git commit -a -m "Continue my crazy feature"
    8. # Decide to scrap the feature and remove the associated commits
    9. git reset --hard HEAD~2
    Alles anzeigen

    Das Kommando git reset HEAD~2 lässt die aktuelle Branch zwei Commits zurückgehen. Diese Art, Commits zurückzusetzen sollte nur mit noch nicht veröffentlichten Commits gemacht weden.

    git clean

    Das Kommando git clean entfernt ungetrackte Dateien aus deinem Arbeitsordner. Man sollte damit jedoch vorsichtig sein, da dieses Kommando nicht rückgängig gemacht werden kann - sei dir also wirklich sicher, dass du diese Dateien nicht mehr benötigst. Man verwendet git clean häufig in Kombination mit git reset --hard.

    Benutzung

    git clean -n

    Führt einen "dry run" von git clean aus. Dies zeigt dir an, welche Dateien gelöscht werden würden.

    git clean -f

    Entfernt die ungetrackten Dateien aus deinem Arbeitsordner. Das Argument -f ist notwendig, warum wird in einem späterem Teil geklärt. Um es zu verwenden reicht es zu wissen, dass man einfach -f verwenden muss.

    git clean -f <path>

    Entfernt die ungetrackten Dateien. Hierbei wird die Ausführung auf einen Pfad <path> beschränkt.

    git clean -df

    Entfernt ungetrackte Dateien und ungetrackte Ordner aus deinem Arbeitsordner.

    Beispiel

    Quellcode

    1. # Edit some existing files
    2. # Add some new files
    3. # Realize you have no idea what you're doing
    4. # Undo changes in tracked files
    5. git reset --hard
    6. # Remove untracked files and directories
    7. git clean -df

    Nachdem du diese Kommandos ausgeführt hast, werden die Staging Area und dein Arbeitsordner exakt so aussehen, wie beim letzten Commit.

    456 mal gelesen

Kommentare 2