Git passiert! 6 Häufige Git-Fehler und deren Behebung



Hinweis perev. : Vor einigen Tagen erschien im Blog ein kleiner, aber sehr nützlicher Hinweis für Ingenieure unseres bevorzugten GitLab-Projekts mit Anweisungen, die bei verschiedenen Problemen, die bei der Arbeit mit Git auftreten, Zeit und Nerven sparen. Es ist unwahrscheinlich, dass sie für erfahrene Benutzer neu sind, aber es wird sicherlich diejenigen geben, für die sie nützlich sein werden. Und am Ende dieses Materials haben wir einen kleinen Bonus von uns hinzugefügt. Einen schönen Freitag noch!

Wir alle machen Fehler, besonders wenn wir mit komplexen Systemen wie Git arbeiten. Aber denk dran: Git passiert!

Wenn Sie gerade erst mit Git anfangen, lernen Sie die Grundlagen der Arbeit mit Git in der Befehlszeile. Und hier werde ich darüber sprechen, wie Sie die sechs häufigsten Fehler in Git beheben können.

1. Ups ... Ich habe mich in der Nachricht zum letzten Commit geirrt


Nach mehreren Stunden Codierung ist es leicht, einen Fehler in der Festschreibungsnachricht zu machen. Glücklicherweise ist dies leicht zu beheben:

git commit --amend 

Mit diesem Befehl wird ein Texteditor geöffnet, in dem Sie Änderungen an der Nachricht bis zum letzten Commit vornehmen können. Und niemand wird wissen, dass Sie "addded" mit drei "ds" geschrieben haben.

2. Ups ... Ich habe vergessen, die Datei zum letzten Commit hinzuzufügen


Ein weiterer beliebter Fehler in Git ist ein zu voreiliges Commit. Haben Sie vergessen, die Datei hinzuzufügen, sie zu speichern, oder sollten Sie eine kleine Änderung vornehmen, um das Commit sinnvoll zu gestalten? Dein Freund wird wieder --amend wieder --amend machen.

Fügen Sie die fehlende Datei hinzu und führen Sie den richtigen Befehl aus:

 git add missed-file.txt git commit --amend 

Jetzt können Sie die Nachricht entweder korrigieren oder einfach in ihrer ursprünglichen Form speichern (mit der hinzugefügten Datei).

3. Ups ... Ich habe eine Datei hinzugefügt, die sich nicht in diesem Repository befinden sollte


Aber was ist, wenn Sie die gegenteilige Situation haben? Was ist, wenn Sie eine Datei hinzugefügt haben, die Sie nicht festschreiben möchten? Eine irreführende ENV-Datei, ein Build-Verzeichnis oder ein Foto mit einer Katze, die versehentlich im falschen Verzeichnis gespeichert wurde ... Alles ist gelöst.

Wenn Sie nur die Phase für die Datei ausgeführt haben und diese noch nicht festgeschrieben haben, erfolgt alles durch einfaches Zurücksetzen der gewünschten Datei (in der Phase):

 git reset /assets/img/misty-and-pepper.jpg 

Wenn Sie die Änderung dennoch festschreiben, ist ein zusätzlicher vorbereitender Schritt erforderlich:

 git reset --soft HEAD~1 git reset /assets/img/misty-and-pepper.jpg rm /assets/img/misty-and-pepper.jpg git commit 

Das Commit wird zurückgesetzt, das Bild wird gelöscht und anschließend wird ein neues Commit durchgeführt.

Hinweis perev. : Wie in den Kommentaren zum Originalartikel erwähnt, kann dieses Problem auch mit der bereits erwähnten --amend gelöst werden. Anscheinend wollte der Autor mit diesem Absatz zeigen, wie es sonst noch Möglichkeiten gibt, den Verlauf von Commits zu ändern, um den Fehler zu beheben.

4. Ups ... Ich habe Änderungen am Master vorgenommen


Sie arbeiten also an einer neuen Funktion und beeilen sich, ohne einen neuen Zweig dafür zu erstellen. Sie haben bereits eine Reihe von Dateien festgeschrieben, und alle diese Festschreibungen befinden sich im Master. Glücklicherweise kann GitLab Push'y direkt im Master verhindern. Daher können wir alle erforderlichen Änderungen an einem neuen Zweig mit den folgenden drei Befehlen rückgängig machen:

Hinweis : Stellen Sie sicher, dass Sie zuerst Ihre Änderungen mit Nullen versehen oder verstauen - sonst gehen alle verloren!

 git branch future-brunch git reset HEAD~ --hard git checkout future-brunch 

Im Master wird ein neuer Zweig erstellt. Es wird ein Rollback in dem Zustand durchgeführt, in dem er sich vor Ihren Änderungen befand, und anschließend wird der neue Zweig mit all Ihren Änderungen ausgecheckt.

5. Ups ... Ich habe einen Fehler im Namen der Filiale gemacht


Die aufmerksamsten konnten im vorherigen Beispiel einen Fehler im Namen der Niederlassung feststellen. Es ist fast 15 Uhr, und ich habe immer noch nicht zu Abend gegessen, also nannte mein Hunger den neuen Zweig ( br a nch ) als Zukunftsbrun nch . Goodies!



Benennen Sie diesen Zweig auf die gleiche Weise um, die beim Umbenennen einer Datei mit dem Befehl mv verwendet wird, dh platzieren Sie sie an einem neuen Speicherort mit dem richtigen Namen:

 git branch -m future-brunch feature-branch 

Wenn Sie diesen Zweig bereits pushen, benötigen Sie einige zusätzliche Schritte. Wir werden den alten Zweig von der Fernbedienung entfernen und den neuen verschieben:

 git push origin --delete future-brunch git push origin feature-branch 

Hinweis perev. : Sie können einen Zweig weiterhin von Remote entfernen, indem Sie:

 git push origin :future-brunch 

6. Ups ... ich habe es wieder getan!


Der letzte Befehl für den Fall, dass alles schief gelaufen ist. Als Sie mit Stack Overflow eine Reihe von Lösungen gesammelt und gepusht haben, wurde alles im Repository noch schlimmer als zu Beginn. Wir alle standen uns einmal ähnlich gegenüber ...

git reflog zeigt eine Liste aller von Ihnen ausgeführten Vorgänge. Dann können Sie die magischen Zeitreisefunktionen von Git nutzen, d. H. kehre zu jedem Moment aus der Vergangenheit zurück. Ich muss beachten, dass dies Ihre letzte Hoffnung ist - Sie sollten in einfachen Fällen nicht darauf zurückgreifen. Um die Liste zu erhalten, gehen Sie wie folgt vor:

 git reflog 

Jeder unserer Schritte steht unter dem wachsamen Auge von Git. Das Team für das oben genannte Projekt zu führen, ergab Folgendes:

 3ff8691 (HEAD -> feature-branch) HEAD@{0}: Branch: renamed refs/heads/future-brunch to refs/heads/feature-branch 3ff8691 (HEAD -> feature-branch) HEAD@{2}: checkout: moving from master to future-brunch 2b7e508 (master) HEAD@{3}: reset: moving to HEAD~ 3ff8691 (HEAD -> feature-branch) HEAD@{4}: commit: Adds the client logo 2b7e508 (master) HEAD@{5}: reset: moving to HEAD~1 37a632d HEAD@{6}: commit: Adds the client logo to the project 2b7e508 (master) HEAD@{7}: reset: moving to HEAD 2b7e508 (master) HEAD@{8}: commit (amend): Added contributing info to the site dfa27a2 HEAD@{9}: reset: moving to HEAD dfa27a2 HEAD@{10}: commit (amend): Added contributing info to the site 700d0b5 HEAD@{11}: commit: Addded contributing info to the site efba795 HEAD@{12}: commit (initial): Initial commit 

Achten Sie auf die Spalte ganz links - dies ist der Index. Wenn Sie zu einem beliebigen Punkt im Verlauf zurückkehren möchten, führen Sie den folgenden Befehl aus und ersetzen Sie {index} durch den entsprechenden Wert (z. B. dfa27a2 ):

 git reset HEAD@{index} 

Jetzt haben Sie sechs Möglichkeiten, um aus den häufigsten Gitfalls herauszukommen (Wortspiel: Fallstricke bedeutet „Falle, Fehler“ - ca. übersetzt ) .

Bonus vom Übersetzer


Erstens ein wertvoller Kommentar zu allem, was oben geschrieben wurde (mit Ausnahme von Absatz 5). Beachten Sie, dass diese Aktionen den Verlauf von Commits ändern. Sie sollten daher nur ausgeführt werden, wenn die Änderungen nicht an remote (push'nut) gesendet wurden. Andernfalls befindet sich das alte fehlerhafte Commit bereits in der Remote- Verzweigung, und Sie müssen entweder git pull ausführen (was beim Zusammenführen der git push --force ist, und der Versuch, den Verlauf zu „löschen“, führt zu schlimmeren Konsequenzen), oder git push --force , das bei der Arbeit mit Datenverlust behaftet ist ein Zweig von mehreren Personen ...



Jetzt - kleine nützliche Ergänzungen aus unserer Erfahrung:

  • Wenn Sie (versehentlich oder nicht) den Zweig geändert haben und zum vorherigen zurückkehren müssen, ist der schnellste Weg die Verwendung von git checkout - .
  • Wenn Sie dem Commit versehentlich eine Datei hinzugefügt haben, die dort nicht hinzugefügt werden sollte, aber noch nicht festgeschrieben wurde, verwenden Sie git reset HEAD path/to/file . Eine ähnliche Situation ist in Absatz 3 beschrieben, aber in Wirklichkeit ist sie weiter gefasst, weil bezieht sich auf unnötige Änderungen im Commit (nicht nur bei einer zusätzlichen Datei).
  • Es wird empfohlen, nicht zu viel -p , indem Sie beim Hinzufügen einer Datei zu einem -p Option -p ( git add -p ). Auf diese Weise können Sie jede Änderung überprüfen, die in das Commit eingeht. Beachten Sie jedoch, dass dem Commit keine nicht verfolgten Dateien hinzugefügt werden. Sie müssen ohne diesen Parameter hinzugefügt werden.
  • Eine Reihe guter Empfehlungen (einschließlich komplexerer) finden Sie im Artikel „ Git-Tutorial: 10 häufig auftretende Git-Probleme und deren Behebung “ von 2014. Beachten Sie insbesondere die Verwendung von git rebase -i und git rebase -i .

PS vom Übersetzer


Lesen Sie auch in unserem Blog:

Source: https://habr.com/ru/post/de419733/


All Articles