it-swarm.com.de

Remote auf ein bestimmtes Commit zurücksetzen

Ich möchte alle Änderungen, die nach dem Commit <commit-hash> ..__ vorgenommen wurden, verwerfen.

git reset --hard <commit-hash>

Jetzt möchte ich dasselbe mit meiner Fernbedienung tun. Wie kann ich das machen? Ich habe ein paar Commits (und Pushes) nach <commit-hash> gemacht und möchte sie einfach alle verwerfen. Ist einfach etwas passiert schrecklich falsch im Weg und ich will es nicht schlimmer machen als es schon ist. (

Ich möchte im Grunde meinen Origin/master auf <commit-hash> zurückspulen.

517
nacho4d

Wenn Sie davon ausgehen, dass Ihr Zweig hier und in der Ferne master heißt und Ihre Fernbedienung Origin heißt, könnten Sie Folgendes tun:

 git reset --hard <commit-hash>
 git Push -f Origin master

Sie sollten dies jedoch vermeiden, wenn jemand anderes mit Ihrem Remote-Repository arbeitet und Ihre Änderungen übernommen hat. In diesem Fall ist es besser, umzukehren die Commits, die Sie nicht möchten, _, dann Push als normal.

Update: Sie haben unten erklärt, dass andere Leute die von Ihnen geposteten Änderungen übernommen haben. Daher ist es besser, ein neues Commit zu erstellen, das alle diese Änderungen zurücksetzt. In diese Antwort von Jakub Narębski gibt es eine nette Erklärung Ihrer Möglichkeiten, dies zu tun. Welche Methode am günstigsten ist, hängt davon ab, wie viele Commits Sie zurücksetzen möchten und welche Methode für Sie am sinnvollsten ist.

Da aus Ihrer Frage eindeutig hervorgeht, dass Sie git reset --hard bereits zum Zurücksetzen Ihres master-Zweigs verwendet haben, müssen Sie möglicherweise git reset --hard ORIG_HEAD verwenden, um Ihren Zweig wieder an den vorherigen Ort zu verschieben. (Wie immer bei git reset --hard, stellen Sie sicher, dass git status sauber ist, dass Sie sich im richtigen Zweig befinden und dass Sie git reflog als Werkzeug kennen, um anscheinend verlorene Commits wiederherzustellen.) Sie sollten auch überprüfen, dass ORIG_HEAD auf das richtige Commit zeigt mit git show ORIG_HEAD.

919
Mark Longair

Verwenden Sie die anderen Antworten, wenn Sie lokale Änderungen nicht verlieren möchten. Diese Methode kann Ihre Fernbedienung immer noch zerstören, wenn Sie den falschen Commit-Hash auswählen, zu dem Sie zurückkehren möchten.

Wenn Sie nur die entfernte Übereinstimmung mit einem Commit festlegen möchten, das sich bereits in Ihrem lokalen Zweig befindet:

  1. Tun Sie nicht führen Sie ein Zurücksetzen durch.
  2. Verwenden Sie git log, um den Hash des Commits zu finden, an dem sich die Remote befinden soll. git log -p, um Änderungen anzuzeigen, oder git log --graph --all --oneline --decorate, um eine kompakte Baumstruktur anzuzeigen. (Das letzte als Alias ​​in Ihrer Shell zu haben, ist sehr praktisch.)
  3. Kopieren Sie den Hash.
  4. Führen Sie einen Befehl aus wie:

    git Push --force <remote> <the-hash>:<the remote branch>
    

    z.B.

    git Push --force Origin 606fdfaa33af1844c86f4267a136d4666e576cdc:master
    
84
Walf

Ich habe ein Problem wie Ihres durch diese Befehle gelöst:

git reset --hard <commit-hash> 
git Push -f <remote> <local branch>:<remote branch> 
53
Ibrohim Ermatov

Meine zwei Cents zu den vorherigen Antworten: Wenn 

git Push --force <remote> <the-hash>:<the remote branch>

funktioniert immer noch nicht, Sie können den Empfangsabschnitt der <your-remote-repo>.git/config-Datei bearbeiten:

[receive]
  #denyNonFastforwards = true
  denyNonFastforwards = false
5
badbishop

Wenn Sie eine frühere Version der Datei wünschen, würde ich die Verwendung von git checkout empfehlen.

git checkout <commit-hash>

Wenn Sie dies tun, werden Sie rechtzeitig zurückgeschickt. Dies hat keine Auswirkungen auf den aktuellen Status Ihres Projekts. Sie können zur Hauptlinie .__ gelangen. git checkout mainline

wenn Sie jedoch eine Datei in das Argument einfügen, wird diese Datei von einem früheren Zeitpunkt an Ihre aktuelle Projektzeit zurückgegeben, d. h.

git checkout <commit-hash> -- file_name
git add .
git commit -m 'file brought from previous time'
git Push

Der Vorteil davon ist, dass es den Verlauf nicht löscht und auch keine bestimmten Codeänderungen rückgängig macht (git revert).

Weitere Informationen finden Sie hier https://www.atlassian.com/git/tutorials/undoing-changes#git-checkout

4
priya khokher

Wenn Ihre Niederlassung nicht in Entwicklung oder Produktion ist, können Sie dies am einfachsten auf ein bestimmtes Commit zurücksetzen und von dort aus eine neue Niederlassung erstellen. Sie können verwenden: 

git checkout 000000  

(wobei 000000 die Commit-ID ist, an die Sie gehen möchten) in Ihrem problematischen Zweig und erstellen Sie dann einfach einen neuen Zweig: 

git remote add [name_of_your_remote]

Dann können Sie eine neue PR erstellen und alles wird gut funktionieren!

1
Gerardo Suarez

In GitLab müssen Sie möglicherweise Ihren Zweig auf ungeschützt setzen, bevor Sie dies tun. Sie können dies unter [Repo]> Einstellungen> Repository> Geschützte Zweige tun. Dann funktioniert die Methode aus Marks Antwort.

git reset --hard <commit-hash>
git Push -f Origin master
1
dudasaus

Lernabschnitt: Öffentliche Commits mit Revert im Atlasssian Blog rückgängig machen https://www.atlassian.com/git/tutorials/resetting-checking-out-and-reverting

0
CodeFarmer

Machen Sie eine Sache, Holen Sie die Commit-Nummer SHA nein. wie 87c9808 und dann

  1. bewegen Sie sich, das ist Ihr Kopf zum angegebenen Commit (indem Sie git reset --hard 89cef43 // Ihre Nummer hier angeben)
  2. Als nächstes nehmen Sie einige Änderungen in einer zufälligen Datei vor, so dass der Git Sie bittet, dies lokal und anschließend remote zu bestätigen Daher müssen Sie jetzt nach dem Übernehmen der Änderung Git commit -a - tun. m "Probe-Commit"
  3. Nun drücken Sie das folgende Commit (wenn dies lokal festgeschrieben wurde) By Git Schieben Sie den Origin-Master
  4. Nun, was git von Ihnen verlangt, ist das

fehler: Einige Referenzen konnten nicht nach .__ verschoben werden. ' https://github.com/YOURREPOSITORY/AndroidExperiments.git ' Tipp: Aktualisierungen wurden abgelehnt, da die Spitze Ihres aktuellen Zweigs hinter .__ liegt. Hinweis: sein entferntes Gegenstück. Integrieren Sie die Remote-Änderungen (z. B. Hinweis: 'git pull ...'), bevor Sie erneut drücken. **

  1. Also können Sie jetzt tun

git Push --force Origin master

  1. Und so hoffe ich, dass es funktioniert :)