2016-07-06 10 views
1

Wir müssen zu einem bestimmten Commit zurückgehen. Einige zufällige Änderungen wurden gemacht, um zu meistern. Versuche, es zu tief zu graben, so Meister ist in einem schlechten Zustand. Wir wollen nun, dass der Meister zurück zu 66ada4cc61d62afc geht.Commit und Push-Änderungen nach dem Zurückgehen zu einer bestimmten Revision im Repository?

Nach git revert back to certain commit:

$ git reset --hard 66ada4cc61d62afc 
HEAD is now at 66ada4c Updated documentation 

Dann versucht, es zu begehen:

$ git add *.h *.cpp 
$ git commit -m "Go back to Commit 66ada4cc61d62afc" 
On branch master 
Your branch is behind 'origin/master' by 16 commits, and can be fast-forwarded. 
    (use "git pull" to update your local branch) 

nothing to commit, working directory clean 

Und schließlich:

$ git push 
To https://github.com/weidai11/cryptopp.git 
! [rejected]  master -> master (non-fast-forward) 
error: failed to push some refs to 'https://github.com/weidai11/cryptopp.git' 
hint: Updates were rejected because the tip of your current branch is behind 
hint: its remote counterpart. Integrate the remote changes (e.g. 
hint: 'git pull ...') before pushing again. 
hint: See the 'Note about fast-forwards' in 'git push --help' for details. 

Gerade jetzt, alles ist genau das, wo ich es will Sein. Ich habe keine Ahnung, warum Git Probleme hat und wovon Git spricht. Es wäre sicher schön, wenn Git tat, was es gesagt wurde. Aber ach, Git macht jede einfache Aufgabe schwierig, und sie wird übermäßige Schmerzen und Leiden verursachen.

Wie setze ich die Änderungen fest?

Antwort

-2

Teillösungen zu vermeiden, die einfach einen Satz von Fehlern für eine andere ausgetauscht werden, durchgeführt ich folgendes:

git clone https://github.com/weidai11/cryptopp.git cryptopp-old 
git clone https://github.com/weidai11/cryptopp.git cryptopp-new 

cd cryptopp-old 
git checkout 66ada4cc61d62afc 

cd ../cryptopp-new 
cp ../cryptopp-old/*.h ../cryptopp-old/*.cpp . 

git commit -am "Go back to Commit 66ada4cc61d62afc" 
3

git reset werden Ihre Änderungen nicht zurückgesetzt. Es wird nur in einen älteren Zustand zurückkehren. Da die letzten Commits bereits in der Ferne sind und Sie keine lokalen Änderungen vornehmen, können Sie nicht pushen.

Verwenden Sie git revert <hash> oder git revert <hash1>..<hash2>. Dadurch wird ein neues Commit erstellt, das die Änderungen des angegebenen Commits zurücknimmt. Dann drücken Sie den Code.

+0

'git revert' versucht wurde, aber es gelang Änderungen' 66ada4cc61d62afc' vor rückgängig zu machen. Ich denke, das liegt daran, dass die PR, die versehentlich gedrückt wurde, gegen einen vorherigen Zustand der Bibliothek war. – jww

3

Die schnelle Lösung: git push -f

Dies zwingt die Push und überschreibt die Remote-Geschichte. Wenn andere Personen dieses Remote-Repository verwenden: Tun Sie das nicht!

Andere Leute, die aus dem Remote-Repository abrufen, werden auf Probleme stoßen, da ihre Geschichte nicht mehr eine Teilmenge der Geschichte des Repository ist. Die meisten Projekte verbieten erzwungene Pushs.

Eine bessere Lösung ist ein neues Commit für Ihre Änderung zu erstellen. Entweder

  • git revert hashes oder
  • git checkout oldversion .; git add/commit

Dieser erstellt dann eine neue am Anfang Ihrer Geschichte begehen, die die Änderung zurück zu gehen benötigt beschreibt Unabhängig davon, welche Version Sie wollen.

+0

* "Eine bessere Lösung ist es, ein neues Commit für Ihre Änderung zu erstellen ..." * - das versuchen wir. Wir möchten, dass das nächste Commit die Dinge wieder zurückführt, wo die Dinge auf dem aktuellen Stand basieren. – jww

+0

Do 'git Kasse 66ada4cc61d62afc.; Git hinzufügen.; git commit -m "foo" ' ' git checkout-Version 'bringt Sie Informationen losgelöst Kopf,' git checkout Version Dateiname 'ruft die Dateien aus dem Verlauf –

+0

@RobinRoth' git checkout .' wird nicht Dateien entfernen. Ein sicherer Weg wäre 'git checkout && git reset --soft master && git commit' – poke

Verwandte Themen