vorbereiten Obwohl meine Antwort über das, was Sie fragen, Ich denke, das ist genau das, was Sie vorhaben.
Sie haben git reset --soft HEAD^
verwendet, um das von Ihnen vorgenommene Commit rückgängig zu machen. Dadurch wird die Arbeitskopie in den Zustand vor Ihrer commit (seit HEAD
Punkte zu Ihrem aktuellen begehen, und HEAD^
Punkte auf der einen, bevor es (vorausgesetzt, es ist nur ein Elternteil).
Aber jetzt, wenn Sie git push
Sie etwas gesagt wie:
! [rejected] <branch> -> <branch>e (non-fast-forward)
error: failed to push some refs to 'ssh://<remote server>/<remote path>'
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.
Dies wird sagen, dass die Commits nicht in einer Reihe aufstellen und es ist da, um Sie zu verhindern, einen Fehler zu machen Die Fehlermeldung ein wenig irreführend ist und Sie nicht wollen, zu tun, was es vermuten lässt. (ein Pull, um Ihren Zweig synchron zu machen.) Sie können nur NICHT wissen, dies aufgrund Ihrer Absichten zu tun.
Sie können einfach dieses Problem umgehen, mit einem --force
(oder -f
) (*):
git push --force
Sie müssen möglicherweise erneut die Upstream einzustellen:
git push --force --set-upstream origin <branch>
Beachten Sie, dass dies haben Konsequenzen, wenn andere Ihre Arbeit bereits gezogen haben, da es verschiedene Commits geben wird, die (möglicherweise) die gleichen Änderungen vornehmen werden. Siehe https://www.kernel.org/pub/software/scm/git/docs/user-manual.html#problems-With-rewriting-history.
Probleme zu vermeiden, immer nur auf Ihre Zweige tun drückt (nicht einige kommunale Zweig - zum Beispiel die development
Zweig die Entwickler ihre Funktion alle Verzweigungen in merge) und sicher sein, offene Kommunikation in Ihrem Team haben.
Ein Entwickler würde typischerweise Verwendung dieses Muster für das, was ich nenne Freitag Nachmittag verpflichtet, wo Sie Ihre Arbeit vor dem Wochenende im Fall von Hardware-Fehlern speichern möchten (aber auf die Rückkehr pre-commit Zustand am Montag) .
*Friday*
git add --all # To add all files whether they are tracked or not
git commit -m "Friday afternoon commit"
git --set-upstream push # --set-upstream is for if the branch doesn't exist on the remote server
*Monday*
git reset --soft HEAD^
git push -f --set-upstream origin <branch>
Der Vorteil es auf diese Weise zu tun, im Vergleich zu einem git revert
in einer anderen Antwort erwähnt, ist extra Commits zu vermeiden. Das Zurücksetzen hat 2 Commits und auf diese Weise wird keine (keine zusätzlichen). Der Vorteil von git reset
ist, dass es NICHT Geschichte schreiben wird, so ist viel sicherer, vor allem, wenn Sie nicht sicher sind, was Sie tun.
(*) In der Regel sind Repositorys so konfiguriert, dass Sie dies nicht zu beherrschen, sondern einen Zweig reparieren und stattdessen eine Pull-Anforderung erstellen. Denn wenn Sie den obigen Link gelesen haben, hat das Schreiben des Verlaufs auf dem Master schwerwiegende Folgen (es sei denn, Sie sind die einzige Person, die diesen Code jemals klont).
Danke, das macht Sinn, obwohl das wahrscheinlich besser als Kommentar gewesen wäre, da es mein Problem nicht wirklich behebt. Trotzdem danke. –