So setzen Sie das Git-Repository zum vorherigen Commit zurück

Wie kann ich von einem aktuellen Status zu einer Momentaufnahme eines bestimmten Fixes zurückkehren?

Wenn ich git log mache, erhalte ich folgende Ausgabe:

 $ git log commit a867b4af366350be2e7c21b8de9cc6504678a61b' Author: Me <me@me.com> Date: Thu Nov 4 18:59:41 2010 -0400 blah blah blah... commit 25eee4caef46ae64aa08e8ab3f988bc917ee1ce4 Author: Me <me@me.com> Date: Thu Nov 4 05:13:39 2010 -0400 more blah blah blah... commit 0766c053c0ea2035e90f504928f8df3c9363b8bd Author: Me <me@me.com> Date: Thu Nov 4 00:55:06 2010 -0400 And yet more blah blah... commit 0d1d7fc32e5a947fbd92ee598033d85bfc445a50 Author: Me <me@me.com> Date: Wed Nov 3 23:56:08 2010 -0400 Yep, more blah blah. 

Wie komme ich vom 3. November zur Fixation zurück, d. H. 0d1d7fc reparieren?

6500
06 нояб. eingestellt von Crazy Serb 06 Nov. 2010-11-06 19:58 '10 um 19:58 2010-11-06 19:58
ответ 41 Antworten
  • 1
  • 2

Es hängt viel davon ab, was Sie mit "Zurücksetzen" meinen.

Wechseln Sie vorübergehend zu einem anderen Fix.

Wenn Sie vorübergehend dorthin zurückkehren möchten, sich selbst betrügen und anschließend wieder dorthin zurückkehren möchten, müssen Sie nur die gewünschte Fixierung überprüfen:

 # This will destroy any local modifications. # Don't do it if you have uncommitted work you want to keep. git reset --hard 0d1d7fc32 # Alternatively, if there work to keep: git stash git reset --hard 0d1d7fc32 git stash pop # This saves the modifications, then reapplies that patch after resetting. # You could get merge conflicts, if you've modified things which were # changed since the commit you reset to. 

Wenn Sie sich vermasselt haben, haben Sie Ihre lokalen Änderungen bereits verworfen. Sie können jedoch zumindest zu dem vorherigen zurückkehren, indem Sie die Einstellungen erneut zurücksetzen.

Annullieren Sie veröffentlichte Commits mit neuen Commits

Andererseits, wenn Sie diese Arbeit veröffentlicht haben, möchten Sie den Zweig wahrscheinlich nicht zurücksetzen, da er die Story effektiv neu schreibt. In diesem Fall können Sie das Commit wirklich zurückgeben. Bei Git hat revert eine sehr spezifische Bedeutung: Erstellen Sie ein Commit mit einem Reverse-Patch, um es rückgängig zu machen. Du schreibst also keine Geschichte um.

git-revert Manpage deckt in der Beschreibung viel davon ab.  Ein weiterer nützlicher Link ist der Abschnitt git-scm.com, in dem git-revert behandelt wird . 

Wenn Sie beschließen, dass Sie am Ende nicht zurückkehren möchten, können Sie die Rücksendung (wie hier beschrieben) oder die Rückkehr vor der Rückkehr (siehe den vorherigen Abschnitt) zurückgeben.

Diese Antwort kann auch in diesem Fall hilfreich sein:
Wie kann ich den Kopf an den vorherigen Ort zurückbewegen? (Separater Kopf)

8356
06 нояб. Die Antwort gibt Cascabel 06 Nov. 2010-11-06 20:04 '10 um 20:04 2010-11-06 20:04

Bringen Sie eine Arbeitskopie zum letzten Commit zurück

Um zum vorherigen Commit zurückzukehren, ignorieren Sie alle Änderungen:

 git reset --hard HEAD 

wobei HEAD der letzte Fix in Ihrem aktuellen Thread ist.

border=0

Rückgabe einer Arbeitskopie an ein älteres Commit

So kehren Sie zum Festschreiben zurück, das größer ist als das letzte Festschreiben:

1396
21 авг. Antwort von boulder_ruby 21. August 2012-08-21 09:19 '12 am 9:19 2012-08-21 09:19

Es gibt viele schwierige und gefährliche Antworten, aber in der Tat ist es einfach:

 git revert --no-commit 0766c053..HEAD git commit 

Dadurch wird alles von HEAD zu einem Hash-Commit zurückgegeben, was bedeutet, dass dieser Commit-Status im Arbeitsbaum neu erstellt wird, als ob seitdem jedes Commit zurückgegeben wurde. Dann können Sie den aktuellen Baum korrigieren, und es wird ein vollständig neuer Fix erstellt, der im Wesentlichen dem Fix entspricht, den Sie "zurückgegeben" haben.

(Das Flag --no-commit ermöglicht es git, alle Commits gleichzeitig zurückzugeben. Andernfalls werden Sie aufgefordert, eine Nachricht für jedes Commit im Bereich zu senden, wodurch Ihre Historie mit unnötigen neuen Commits verschmutzt wird.)

Dies ist eine sichere und einfache Möglichkeit, zu einem früheren Status zurückzukehren . Da keine Historie zerstört wird, kann sie für bereits veröffentlichte Commits verwendet werden.

1361
12 февр. Die Antwort gibt Yarin am 12. Februar. 2014-02-12 07:18 14 um 07:18 Uhr 2014-02-12 07:18

Die beste Option für mich und vielleicht für andere ist die Git-Reset-Option:

 git reset --hard <commidId>  git clean -f 

Es war die beste Option für mich! Es ist einfach, schnell und effizient!


Hinweis: Wie in den Kommentaren erwähnt, sollten Sie dies nicht tun, wenn Sie Ihren Zweig mit anderen Personen teilen, die Kopien alter Commits haben.

Auch aus den Kommentaren können Sie die weniger ballzy-Methode verwenden

git clean -i

173
22 окт. Die Antwort gibt Pogrindis am 22. Oktober. 2013-10-22 14:53 '13 am 14:53 2013-10-22 14:53

Bevor Sie antworten, fügen Sie ein wenig Hintergrund hinzu und erklären Sie, was HEAD .

First of all what is HEAD?

HEAD ist einfach ein Verweis auf das aktuelle (letzte) Commit im aktuellen Thread. Zu jeder Zeit kann es nur einen HEAD (außer git worktree ).

Der Inhalt von HEAD wird in .git/HEAD gespeichert und enthält 40 Byte SHA-1 des aktuellen Commits.


detached HEAD

Wenn Sie das letzte Commit nicht verwenden, bedeutet HEAD , dass es auf das vorherige Commit in der Historie verweist. Es wird als detached HEAD .

2019

06 февр. Die Antwort wird mit CodeWizard 06 Feb. gegeben. 2015-02-06 00:56 '15 am 0:56 2015-02-06 00:56

Wenn Sie übertakten möchten, löschen Sie die letzte Commit-Nachricht und stellen Sie die geänderten Dateien in die Wartesch>

 git reset --soft HEAD~1 
  • --soft gibt an, dass nicht --soft Dateien als Arbeitsdateien gespeichert werden sollen, im Gegensatz zu --hard , die sie verwerfen.
  • HEAD~1 - letzter Fix. Wenn Sie 3 Fixes HEAD~3 möchten, können Sie HEAD~3 . Wenn Sie zu einer bestimmten Revisionsnummer zurückkehren möchten, können Sie dies auch mit Ihrem SHA-Hash tun.

Dies ist ein äußerst nützlicher Befehl in Situationen, in denen Sie das Falsche getan haben und das letzte Commit abbrechen möchten.

Quelle: http://nakkaya.com/2009/09/24/git-delete-last-commit/

116
04 марта '14 в 20:25 2014-03-04 20:25 Die Antwort wird von Stephen Ostermiller am 04. März um 20:25 gegeben. 2014-03-04 20:25

Ich habe viele Möglichkeiten ausprobiert, um lokale Änderungen in Git rückgängig zu machen, und es scheint, dass es am besten funktioniert, wenn Sie nur zum letzten Commit-Status zurückkehren möchten.

 git add .  git checkout master -f 

Kurzbeschreibung:

  • Es werden keine Commits erstellt, wie dies bei git revert Fall ist.
  • Ihr git checkout <commithashcode> wird nicht wie bei git checkout <commithashcode> .
  • Dadurch werden alle Ihre lokalen Änderungen überschrieben und alle hinzugefügten Dateien seit dem letzten Commit im Thread entfernt.
  • Es funktioniert nur mit den Namen der Zweige, so dass Sie nur auf diese Weise zum letzten Commit im Zweig zurückkehren können.

Ich fand einen viel bequemeren und leichteren Weg, um die obigen Ergebnisse zu erreichen:

 git add .  git reset --hard HEAD 

wobei HEAD das letzte Commit in Ihrem aktuellen Thread angibt.

Dies ist derselbe Code wie boulder_ruby, aber ich habe git add . hinzugefügt git add . bevor git reset --hard HEAD alle neuen Dateien git reset --hard HEAD , die seit dem letzten Commit erstellt wurden, da dies die meisten Leute erwarten, wenn ich zum letzten Commit zurückkehre.

104
29 июля '12 в 14:01 2012-07-29 14:01 Die Antwort wird von Roman Minenok am 29. Juli '12 um 14:01 Uhr 2012-07-29 14:01 gegeben

Sie können dies mit den folgenden zwei Befehlen tun:

 git reset --hard [previous Commit SHA id here] git push origin [branch Name] -f 

Dadurch wird das vorherige Git-Commit entfernt.

Wenn Sie Ihre Änderungen speichern möchten, können Sie auch Folgendes verwenden:

 git reset --soft [previous Commit SHA id here] 

Dann werden Ihre Änderungen gespeichert.

90
12 дек. Die Antwort ist Kiran Boghra 12. Dezember gegeben. 2014-12-12 09:52 14 um 09:52 Uhr 2014-12-12 09:52

~/commits-to-revert.txt , Sie haben die folgenden Commits in einer Textdatei mit dem Namen ~/commits-to-revert.txt (ich habe git log --pretty=oneline , um sie zu erhalten)

 fe60adeba6436ed8f4cc5f5c0b20df7ac9d93219 0c27ecfdab3cbb08a448659aa61764ad80533a1b f85007f35a23a7f29fa14b3b47c8b2ef3803d542 e9ec660ba9c06317888f901e3a5ad833d4963283 6a80768d44ccc2107ce410c4e28c7147b382cd8f 9cf6c21f5adfac3732c76c1194bbe6a330fb83e3 fff2336bf8690fbfb2b4890a96549dc58bf548a5 1f7082f3f52880cb49bc37c40531fc478823b4f5 e9b317d36a9d1db88bd34831a32de327244df36a f6ea0e7208cf22fba17952fb162a01afb26de806 137a681351037a2204f088a8d8f0db6e1f9179ca 

Erstellen Sie ein Bash- Shell-Skript, um alle zurückzugeben:

55
14 окт. Die Antwort gibt Lance Caraccioli 14 Okt. 2011-10-14 00:51 '11 am 0:51 2011-10-14 00:51

Zusätzliche Alternativen zu Jefromi-Lösungen

Jefromi-Lösungen sind definitiv die besten, und Sie sollten sie auf jeden Fall verwenden. Der Vollständigkeit halber wollte ich jedoch auch diese anderen alternativen Lösungen aufzeigen, mit denen auch ein Commit zurückgegeben werden kann (in dem Sinne, dass Sie ein neues Commit erstellen, das Änderungen an dem vorherigen Commit rückgängig macht, wie es bei git revert Fall ist).

Um klar zu sein, diese Alternativen sind nicht der beste Weg, um zum Commit zurückzukehren , Jefromi-Lösungen , aber ich möchte nur darauf hinweisen, dass Sie diese anderen Methoden auch verwenden können, um das gleiche Niveau wie git revert .

Alternative 1: Hard- und Soft-Reset

Ist dies eine geringfügig modifizierte Version von Charles Baileys Lösung, um SHA-Hash-Commit wieder auf Git zu übertragen? :

53
29 июня '14 в 20:51 2014-06-29 20:51 Die Antwort wird von user456814 29. Juni 14 am 20:51 2014-06-29 20:51 gegeben

Nichts hat für mich hier außer dieser genauen Kombination funktioniert:

 git reset --hard <commit_hash> git push origin <branch_name> --force 

Der Schlüssel hier ist erzwungenes Drücken, keine zusätzlichen Meldungen zum Fixieren / Fixieren usw.

53
13 февр. die antwort wird am serdarsenay 13 feb gegeben . 2018-02-13 01:40 '18 um 1:40 2018-02-13 01:40

Hier ist eine viel einfachere Methode , um zum vorherigen Commit zurückzukehren (und es in einem nicht verwalteten Zustand zu haben, was immer Sie möchten, damit Sie es tun können):

 git reset HEAD~1 

Es ist also nicht nötig, Bezeichner zu korrigieren usw. :)

50
29 февр. Die Antwort gibt Paul Walczewski am 29. Februar. 2016-02-29 11:40 '16 um 11:40 2016-02-29 11:40

Ok, zurück zum vorherigen Commit in git ist ziemlich einfach ...

Wiederherstellen, ohne Änderungen zu speichern :

 git reset --hard <commit> 

Gehen Sie zurück und speichern Sie die Änderungen:

 git reset --soft <commit> 

Erklären Sie, dass Sie mit git reset auf einen bestimmten Status zurücksetzen können, normalerweise mit einem Hash-Commit, wie Sie oben gesehen haben.

Wie Sie jedoch sehen können, besteht der Unterschied in der Verwendung der beiden Flags - --soft und --hard . Die Standardeinstellung ist git reset mit dem Flag --soft Es wird jedoch immer empfohlen, dieses Flag zu verwenden. Ich erkläre jedes Flag:


- weich

Das Standardkennzeichen erfordert, wie erläutert, keine Angabe. Es ändert nicht die Arbeitsstruktur, sondern fügt alle Änderungsdateien hinzu, die bereit sind, festgeschrieben zu werden, sodass Sie zum Commit-Status zurückkehren, in dem die Dateiänderungen unverändert bleiben.


--hard

Seien Sie vorsichtig mit diesem Flag, es setzt den Arbeitsbaum zurück und alle Änderungen in den überwachten Dateien verschwinden!


Ich habe auch ein Bild erstellt, das bei der Arbeit mit git im wirklichen Leben vorkommen kann:

2019

20 июля '17 в 18:55 2017-07-20 18:55 Die Antwort wird von Alireza am 20. Juli 17 um 18:55 2017-07-20 18:55 gegeben

Angenommen, Sie sprechen über den Host und den entsprechenden Zweig (dies legt nahe, dass es sich um jeden Arbeitszweig handeln kann, über den Sie sich Sorgen machen):

 # Revert local master branch to November 3rd commit ID git reset --hard 0d1d7fc32e5a947fbd92ee598033d85bfc445a50 # Revert remote master branch to November 3rd commit ID git push -f origin 0d1d7fc32e5a947fbd92ee598033d85bfc445a50:master 

Ich habe die Antwort aus dem Blogpost gefunden. Löschen Sie ein entferntes Git-Repository für ein bestimmtes Commit .

45
10 мая '16 в 20:21 2016-05-10 20:21 Antwort an markreyes 10. Mai '16 um 20:21 2016-05-10 20:21

Wenn Sie nach all den Änderungen alle diese Befehle drücken, müssen Sie möglicherweise Folgendes verwenden:

 git push -f ... 

Und nicht nur git push .

34
05 сент. die antwort wird von sivi 05 sep gegeben . 2013-09-05 17:03 13 am 17:03 2013-09-05 17:03

Es gibt einen Befehl (nicht Teil des Git-Kernels, aber im git-extras- Paket enthalten), der speziell zum Zurückgeben und Ausführen alter Commits verwendet wird:

 git back 

Auf der Manpage kann es auch als solches verwendet werden:

 # Remove the latest three commits git back 3 
32
08 авг. die antwort wird von Shadow Man 08 aug gegeben. 2013-08-08 21:30 '13 um 21:30 Uhr 2013-08-08 21:30 Uhr

Kehren Sie zum letzten Commit zurück und ignorieren Sie alle lokalen Änderungen:

 git reset --hard HEAD 
27
26 июля '16 в 16:13 2016-07-26 16:13 Die Antwort wird von Mohammed Irfan Tirupattur am 26. Juli 16 um 16:13 Uhr 2016-07-26 16:13 gegeben

Wählen Sie den erforderlichen Halter und prüfen Sie ihn.

 git show HEAD git show HEAD~1 git show HEAD~2 

bis Sie die gewünschte Fixierung erhalten. Um zu erzwingen, dass HEAD dies zeigt, tun Sie

 git reset --hard HEAD~1 

oder git reset --hard HEAD~2 oder etwas anderes.

26
26 февр. die antwort ist gegeben tonythomas01 26. februar 2014-02-26 15:52 '14 am 15:52 2014-02-26 15:52

Sie können diese ersten Schritte selbst durchführen und zu git-repo zurückkehren.

  1. Holen Sie die neueste Version Ihres Repositorys mit dem Befehl git pull --all aus Bitbucket git pull --all .

  2. Führen Sie den Befehl git log mit -n 4 von Ihrem Terminal aus aus. Die Zahl nach -n bestimmt die Anzahl der Commits im Protokoll, beginnend mit dem letzten Commit in Ihrem lokalen Protokoll.

    $ git log -n 4

  3. git reset --hard HEAD~N Verlauf Ihres Repositorys zurück, wobei N die Anzahl der Commits ist, die Sie git reset --hard HEAD~N möchten. Im folgenden Beispiel wird der Kopf auf ein Commit gesetzt, das letzte Commit im Verlauf des Repository:

  4. Klicken Sie mit git push --force auf eine Änderung in git repo, um eine Änderung zu erzwingen.

Wenn Sie möchten, dass das Git-Repository eine vorherige Festschreibung hat

 git pull --all git reset --hard HEAD~1 git push --force 
24
06 апр. Antwort von Nanhe Kumar am 6. April 2017-04-06 15:20 '17 am 15:20 2017-04-06 15:20

Dies ist eine weitere direkte Rücksetzmethode für das letzte Commit.

 git stash git stash clear 

Alle Änderungen, die Sie seit dem letzten Commit vorgenommen haben, werden direkt gelöscht.

PS: Er hat ein kleines Problem. es löscht auch alle kürzlich gespeicherten Cache-Änderungen. Ich denke, in den meisten Fällen spielt es keine Rolle.

20
05 мая '16 в 14:43 2016-05-05 14:43 Die Antwort gibt Point Networks am 05. Mai '16 um 14:43 Uhr 2016-05-05 14:43

Um das Codiererverzeichnis von einigen zufälligen Änderungen zu reinigen, haben wir Folgendes verwendet:

 git add -A . git reset --hard HEAD 

Nur git reset --hard HEAD die Änderungen git reset --hard HEAD , die "neuen" Dateien jedoch nicht. In ihrem Fall haben sie versehentlich einen wichtigen Ordner zufällig irgendwo hingezogen, und alle diese Dateien wurden mit Git als neu behandelt, sodass reset --hard ihn nicht reparierte. Laufender git add -A . vorher hat er sie alle explizit mit Git verfolgt, das mit reset zerstört wurde.

20
11 окт. Antwort von Chris Moschini am 11. Oktober 2015-10-11 03:10 '15 um 3:10 2015-10-11 03:10

Um Änderungen von einem vorherigen Commit in HEAD zu speichern und zum vorherigen Commit zu gehen, führen Sie Folgendes aus:

 git reset <SHA> 

Wenn keine Änderungen vom vorherigen Commit für HEAD erforderlich sind und einfach alle Änderungen verwerfen, gehen Sie folgendermaßen vor:

 git reset --hard <SHA> 
20
28 июля '15 в 11:35 2015-07-28 11:35 Die Antwort wird von Vishnu Atrai am 28. Juli 15 um 11:35 2015-07-28 11:35 gegeben

Ich glaube, dass einige Leute zu dieser Frage kommen können und wissen möchten, wie der Rollback die Änderungen vorgenommen hat, die sie an ihrem Besitzer vorgenommen haben - das heißt, alles wegwerfen und zum Ursprung / Besitzer zurückkehren, und in diesem Fall Folgendes tun:

 git reset --hard origin/master 

https://superuser.com/questions/273172/how-to-reset-master-to-origin-master

19
05 февр. die antwort ist nevster 05 feb . 2015-02-05 04:28 '15 am 4:28 2015-02-05 04:28

Revert ist ein Befehl zum Festschreiben von Commits.

 git revert <commit1> <commit2> 

Beispiel:

git revert 2h3h23233

Es kann einen Bereich wie unten gezeigt vom Kopf empfangen. Hier sagt 1: "Gib den letzten Fix zurück."

git revert HEAD~1..HEAD

und dann git push

16
20 авг. Antwort von Sireesh Yarlagadda 20 Aug. 2015-08-20 17:45 '15 um 17:45 Uhr 2015-08-20 17:45 Uhr

Letzte Commit zurücksetzen:

 git reset --hard HEAD 

HEAD ist einfach ein Verweis auf das aktuelle (letzte) Commit im aktuellen Thread. Es kann immer nur ein HEAD vorhanden sein.

Gehen Sie zurück zum älteren Befehl: Der schnellste Weg zum Wiederherstellen der alten Version ist die Verwendung des Befehls reset :

 # Resets index to former commit git reset 56e05fced # Moves pointer back to previous HEAD git reset --soft HEAD@{1} # Updates working copy to reflect the new commit git reset --hard 

Dadurch wird Ihr HEAD-Zweig auf die angegebene Version zurückgespult. Alle Commits, die nach dieser Version angezeigt wurden, werden tatsächlich abgebrochen. Ihr Projekt ist genau das gleiche wie zu diesem Zeitpunkt.

Der Befehl reset hat mehrere Optionen. Eine der interessantesten ist das Flag --soft . Wenn Sie es anstelle von --hard , speichert Git alle Änderungen an diesen " --hard gemacht" als lokale Änderungen.

Wiederherstellen einer Version in einem neuen lokalen Zweig

Wie bereits erwähnt, ist die Verwendung des Befehls reset in Ihrem HEAD Zweig eine radikale Aktion: Er wird alle Commits (in diesem Zweig) entfernen, die nach der angegebenen Revision erscheinen. Wenn Sie sicher sind, dass Sie das wollen, ist alles in Ordnung.

Es gibt jedoch auch einen sichereren Weg, wenn Sie Ihren aktuellen HEAD-Zweig unangetastet lassen. Da die "Branches" in Git so billig und einfach sind, können wir leicht einen neuen Ast erstellen, der mit dieser alten Version beginnt:

 git checkout -b old-project-state 0ad5a7a6 

Normalerweise wird der Checkout-Befehl verwendet, um einfach Zweige zu wechseln. Однако, предоставляя параметр -b, вы также можете создать новую ветку (в данном примере - старое состояние проекта). Если вы не хотите, чтобы он начинался с текущей ревизии HEAD, вам также необходимо предоставить хеш-фиксацию - старую ревизию проекта, которую мы хотим восстановить.

Теперь у вас есть новый филиал с именем old-project-state, отражающий старую версию вашего проекта - без прикосновения или даже удаления каких-либо других коммитов или веток.

14
ответ дан Lyes CHIOUKH 31 авг. '18 в 14:08 2018-08-31 14:08

Если ситуация срочная , и вы просто хотите сделать то, что задал вопросник, быстрым и грязным способом, предполагая, что ваш проект находится в каталоге "мой проект":

  1. Скопируйте весь каталог и назовите его как-нибудь еще, например, "мой проект - копия".

  2. Делать:

     git reset --hard [first-4-letters> 

Затем у вас есть две версии в вашей системе... вы можете просматривать, копировать или изменять файлы, представляющие интерес, или что-то еще из предыдущего коммита. Вы можете полностью удалить файлы в разделе "Мой проект - копия", если решили, что новая работа никуда не денется...

Очевидная вещь, если вы хотите продолжить состояние проекта без фактической отмены работы, поскольку этот извлеченный коммит состоит в том, чтобы снова переименовать каталог: удалить проект, содержащий извлеченный коммит (или дать ему временное имя), и переименовать ваш " мой проект - скопируйте "каталог" обратно в "мой проект". Тогда, вероятно, сделайте еще один коммит довольно скоро.

Git - блестящее творение, но вы не можете просто "поднять его на лету": также люди, которые слишком часто пытаются объяснить это, предполагают, что они уже знакомы с другими VCS [системами контроля версий] и слишком глубоко копаются, и совершать другие преступления, такие как использование взаимозаменяемых терминов для "проверки" - способами, которые иногда кажутся почти рассчитанными, чтобы запутать новичка.

Чтобы избавить себя от стресса, вы должны прочитать книгу по Git - я бы порекомендовал "Контроль версий с Git" . И если вы можете доверять мне (или, скорее, моим шрамам), когда я говорю "должен", из этого следует, что вы можете сделать это СЕЙЧАС . Большая часть сложности Git происходит от ветвления и последующего повторного использования. Но из твоего вопроса нет причин, почему люди должны ослеплять тебя наукой .

Особенно, если, например, это отчаянная ситуация, и вы новичок в Git!

PS: Еще одна мысль: (сейчас) на самом деле довольно просто хранить Git-репозиторий ("repo") в каталоге, отличном от каталога с рабочими файлами. Это означает, что вам не нужно будет копировать весь репозиторий Git, используя вышеуказанное быстрое и грязное решение. Смотрите ответ Фрайера, используя --separate-git-dir здесь . Тем не менее, будьте осторожны : если у вас есть репозиторий "отдельный каталог", который вы не копируете, и вы выполняете полный сброс, все версии, следующие за фиксацией сброса, будут потеряны навсегда, если только у вас нет, как вам абсолютно необходимо, регулярно создавайте резервные копии вашего хранилища, желательно в облаке (например, Google Drive ) среди других мест.

13
ответ дан mike rodent 19 марта '15 в 20:33 2015-03-19 20:33

Попробуйте выполнить сброс до требуемого фиксации -

git reset <COMMIT_ID>

(чтобы проверить, что COMMIT_ID использует git log )

Это приведет к сбросу всех измененных файлов в состояние без добавления.

Теперь вы можете checkout все не добавленные файлы

git checkout.

Проверьте git log чтобы проверить свои изменения.

UPDATE

Если у вас есть одно и только сообщение в вашем репо, попробуйте

git update-ref -d HEAD

13
ответ дан optimistanoop 07 мая '17 в 2:03 2017-05-07 02:03

Поскольку ваши коммиты удаляются удаленно, вам необходимо их удалить. Позвольте мне предположить, что ваша ветка развивается, и она толкается по происхождению.

Сначала вам нужно удалить развитие из источника:

 git push origin :develop (note the colon) 

Затем вам нужно получить статус, который вы хотите, позвольте мне предположить, что хеш фиксации EFGHIJK:

 git reset --hard EFGHIJK 

Наконец, нажмите снова развернуть:

 git push origin develop 
11
ответ дан George Ninan 20 марта '17 в 10:33 2017-03-20 10:33

Achtung! Эта команда может привести к потере истории фиксации, если пользователь ошибочно допустил ошибку. Всегда имейте дополнительную резервную копию своего git где-то еще на всякий случай, если вы ошибаетесь, чем вам немного безопаснее. :)

У меня была аналогичная проблема, и я хотел вернуться к предыдущему Commit. В моем случае я не был настроен на то, чтобы сохранить новую фиксацию, поэтому я использовал Hard .

So habe ich es gemacht:

 git reset --hard CommitId  git clean -f 

Это будет возвращено в локальном репозитории, здесь после использования git push -f будет обновлять удаленный репозиторий.

 git push -f 
11
ответ дан maytham-ɯɐɥʇʎɐɯ 08 янв. '18 в 17:15 2018-01-08 17:15

На GitKraken вы можете сделать это:

  1. Щелкните правой кнопкой мыши фиксацию, которую вы хотите сбросить, выберите: Сбросить на это commit/Hard:

2019

ответ дан Ângelo Polotto 02 мая '18 в 21:41 2018-05-02 21:41
  • 1
  • 2

Другие вопросы по меткам или Задайте вопрос