Git ist ein handliches, aber komplexes System. Die Schwierigkeit besteht zuallererst darin, dass Sie durch Nachlässigkeit einen Fehler machen können, der dann schwer oder sogar unmöglich zu korrigieren ist. Die Git-Dokumentation enthält Beschreibungen vieler Befehle, mit denen Sie einen Fehler beheben können.
Um das Problem zu beheben, müssen Sie jedoch den genauen Namen des Befehls kennen. Und hier haben wir das typische Henne-Ei-Problem. Dieser Artikel beschreibt die Befehle, mit denen Sie Problemsituationen lösen können.
Verdammt, ich habe etwas falsch gemacht. Gib mir eine magische Zeitmaschine!
git reflog # you will see a list of every thing you've # done in git, across all branches! # each one has an index HEAD@{index} # find the one before you broke everything git reset HEAD@{index} # magic time machine
Mit diesem Befehl können Sie versehentlich gelöschte Daten wiederherstellen, indem Sie die Zusammenführung, die den Fehler verursacht hat, zurücksetzen. refLog wird sehr oft verwendet - sagen wir Danke, dass Sie vorgeschlagen haben, diesen Befehl hinzuzufügen.
Ich habe ein Commit gemacht, aber sofort einen Fehler bemerkt, der behoben werden muss!
# make your change git add . # or add individual files git commit --amend --no-edit # now your last commit contains that change! # WARNING: never amend public commits
Der Befehl ermöglicht es, unangenehme Kleinigkeiten zu korrigieren - wenn Sie etwas begangen haben und dann ein Problem wie ein fehlendes Leerzeichen nach dem "=" - Zeichen gesehen haben. Ja, es ist möglich, Änderungen mit einem neuen Commit vorzunehmen, indem beide mit rebase -i kombiniert werden. Aber es ist noch ein langer Weg.
NB! Ändern Sie niemals Commits in einer öffentlichen Filiale. Verwenden Sie den Befehl nur für Commits in der lokalen Verzweigung, da sonst Probleme auftreten.
Ich möchte die Nachricht des letzten Commits ändern!
git commit --amend # follow prompts to change the commit message
Es ist nur ... dumme Posting-Anforderungen.
Ich habe mich versehentlich zum Master verpflichtet, obwohl es in einem neuen Zweig hätte sein sollen!
# create a new branch from the current state of master git branch some-new-branch-name # remove the last commit from the master branch git reset HEAD~ --hard git checkout some-new-branch-name # your commit lives in this branch now :)
Wenn Sie sich bereits für einen öffentlichen Thread entschieden haben, funktionieren die Befehle nicht. In diesem Fall setzt git HEAD @ {anstelle von HEAD ~ die Anzahl der Commits zurück, auf die zurückgegriffen werden soll} zurück.
Nun, ich habe mich fälschlicherweise dem falschen Zweig verschrieben
# undo the last commit, but leave the changes available git reset HEAD~ --soft git stash # move to the correct branch git checkout name-of-the-correct-branch git stash pop git add . # or add individual files git commit -m "your message here"; # now your changes are on the correct branch
Es gibt eine andere Möglichkeit, wie viele Entwickler Cherry-Pick verwenden.
git checkout name-of-the-correct-branch # grab the last commit to master git cherry-pick master # delete it from master git checkout master git reset HEAD~ --hard
Ich muss diff ausführen, aber nichts funktioniert.
Wenn Sie sicher sind, dass die Änderungen vorgenommen wurden, das diff jedoch leer ist, haben Sie die Änderungen möglicherweise über add indiziert. Daher lohnt es sich, eine spezielle Flagge zu verwenden.
git diff --staged
Im Allgemeinen ist dies kein Fehler, sondern eine Funktion, aber es ist verdammt offensichtlich. ¯ \ _ (ツ) _ / ¯
Ich muss dringend ein Commit rückgängig machen, das vor 5 Commits durchgeführt wurde
# find the commit you need to undo git log # use the arrow keys to scroll up and down in history # once you've found your commit, save the hash git revert [saved hash] # git will create a new commit that undoes that commit # follow prompts to edit the commit message # or just save and commit
Glücklicherweise müssen Sie nicht 5 Commits zurückgehen, indem Sie alte und neue Dateien kopieren und einfügen. Sie können dies alles mit Zurücksetzen rückgängig machen.
Darüber hinaus können Sie nicht nur das Commit, sondern die gesamte Datei zurücksetzen. Es stimmt, dies sind bereits andere Befehle ...
Machen Sie Änderungen in der Datei rückgängig.
Und hier sind diese anderen Befehle.
# find a hash for a commit before the file was changed git log # use the arrow keys to scroll up and down in history # once you've found your commit, save the hash git checkout [saved hash] -- path/to/file # the old version of the file will be in your index git commit -m "Wow, you don't have to copy-paste to undo"
Als ich diese Gelegenheit zum ersten Mal fand, war es COOL, COOL, K-R-U-T-O. Aber wenn Sie darüber nachdenken - warum ist das Auschecken die beste Option, um Änderungen in einer Datei zu verwerfen? : shakes-fist-at-linus-torvalds:
Alles, ich gebe auf
cd .. sudo rm -r fucking-git-repo-dir git clone https://some.github.url/fucking-git-repo-dir.git cd fucking-git-repo-dir
Vielen Dank an Eric V. Für diese Methode. Und richten Sie alle Beschwerden über die Verwendung von Sudo an ihn.
Wenn Sie die Änderungen auf Null setzen und vollständig auf die Originalversion zurücksetzen müssen, können Sie genau das versuchen. Aber denken Sie daran - diese Befehle sind destruktiv und irreversibel.
# get the lastest state of origin git fetch origin git checkout master git reset --hard origin/master # delete untracked files and directories git clean -d --force # repeat checkout/reset/clean for each borked branch
Beachtung! Dieser Artikel ist nicht als umfassende Anleitung gedacht. Und ja, es gibt andere Möglichkeiten, dasselbe zu tun, und noch besser. Aber ich habe diese Optionen durch Ausprobieren gefunden. Dann hatte ich eine verrückte Idee, meine Erkenntnisse zu teilen. Nimm es oder geh!
Expertenkommentar
Daniil Pilipenko , Direktor des Rekrutierungszentrums für IT-Spezialisten bei SymbioWay und Evangelist des Skillbox Online-Universitäts-Backends, fügte seine Meinung zu Git und seiner Relevanz für Entwickler hinzu.
Git erschien 2005 und es dauerte lange, bis der Markt übernommen wurde. Ich erinnere mich, als wir 2008 SVN im Entwicklungsteam implementierten. Und selbst im Jahr 2012 hat ein Unternehmen in meiner Nähe Mercurial stark umgesetzt. Im Laufe der Jahre wurde vielen klar, dass Git das beste Versionskontrollsystem ist und mittlerweile von fast allen Entwicklern verwendet wird.
Wenn Sie ein Anfänger sind, der einen Job suchen, sollten Sie unbedingt Git lernen! Sie sollten wissen, was ein Versionskontrollsystem ist und warum es benötigt wird, was ein Commit, eine Verzweigung ist, wie ein Repository geklont und die vorgenommenen Änderungen an den Server gesendet werden, wie neue Änderungen vom Server abgerufen werden, wie zusammengeführt wird und welche Arten von "Zurücksetzen" vorhanden sind. Auf den ersten Blick mag Ihnen dieses Thema unverständlich und schwierig erscheinen, aber Sie müssen sich nur an die Verwendung von Git gewöhnen, und Sie werden es nicht entwöhnen können.