810 Stimmen

Was bedeutet "git reset" im Klartext?

Ich habe gesehen interessante Beiträge Erläuterung von Feinheiten über git reset .

Je mehr ich darüber lese, desto mehr stellt sich leider heraus, dass ich es nicht ganz verstehe. Ich komme aus einem SVN-Hintergrund und Git ist ein völlig neues Paradigma. Mercurial habe ich leicht verstanden, aber Git ist viel technischer.

Ich denke git reset ist nahe an hg revert aber es scheint Unterschiede zu geben.

Was genau bedeutet also git reset tun? Bitte geben Sie ausführliche Erklärungen zu folgenden Punkten:

  • die Optionen --hard , --soft y --merge ;
  • die seltsame Notation, die Sie mit HEAD wie zum Beispiel HEAD^ y HEAD~1 ;
  • konkrete Anwendungsfälle und Arbeitsabläufe;
  • Auswirkungen auf die Arbeitskopie, die HEAD und Ihr globales Stressniveau.

2voto

Ian Warburton Punkte 14158

Checkout richtet den Kopf auf ein bestimmtes Commit.

Zurücksetzen verweist einen Zweig auf einen bestimmten Commit. (Ein Branch ist ein Zeiger auf einen Commit.)

Übrigens, wenn Ihr Kopf nicht auf einen Commit zeigt, auf den auch ein Branch zeigt, dann haben Sie einen abgetrennten Kopf. (Wie sich herausstellte, war das falsch. Siehe Kommentare...)

1voto

M Imam Pratama Punkte 561

Ich mache nicht immer einen Git-Reset, aber wenn, dann schaue ich mir das an:

* 444668f (HEAD -> main) C
|
* c3739b7 B
|
* 207e8a1 A
|
* 38fab46 Initial commit

git reset --hard 207e8

* 207e8a1 (HEAD -> main) A
|
* 38fab46 Initial commit

To retrieve the changes, use --soft instead

HEAD verschoben nach A ( main auch, weil HEAD zeigt auf main ). git reset nicht "zurückgesetzt" wird B y C . Sie können immer noch sehen B y C mit dem --reflog Option von git log :

git log --graph --oneline --all --reflog

Warnung

Bevor Sie das tun git reset ,

  • Wenn Sie eine nicht abgestufte Änderungen :

    • Mit --hard wird es ausrangiert
    • Mit --mixed ( Standard ), erhält sie gemischt mit staged changes und den abgerufenen commits changes
  • Wenn Sie eine schrittweise Veränderungen :

    • Mit --hard wird es ausrangiert
    • Mit --mixed wird es gemischt mit unveränderten Änderungen und den abgerufenen Übergabeänderungen
    • Mit --soft wird es gemischt mit den abgerufenen Änderungen der Commits

Um sie loszuwerden, können Sie Folgendes verwenden git stash aber ich ziehe es vor, einfach einen neuen Zweig zu erstellen und dort einen separaten Commit für die staged und unstaged Änderungen zu erstellen. Dann verwenden Sie git rebase + git reset wenn ich sie wieder brauche.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X