Das benutze ich oft:
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force;
Beachten Sie, dass es gute Praxis , nicht um Änderungen an Ihrem lokalen Master / entwickelt Zweig ist, sondern die Kasse zu einem anderen Zweig für jede Änderung, mit dem Zweignamen durch die Art der Veränderung vorangestellt, zum Beispiel feat/
, chore/
, fix/
etc. Auf diese Weise nur Sie müssen Änderungen ziehen, keine Änderungen vom Master übertragen. Gleiches gilt für andere Branchen, zu denen andere beitragen. Daher sollte das oben Gesagte nur verwendet werden, wenn Sie Änderungen an einem Zweig festgeschrieben haben, für den sich andere verpflichtet haben und der zurückgesetzt werden muss. Andernfalls vermeiden Sie es in Zukunft, zu einem Zweig zu pushen, zu dem andere pushen, sondern checken Sie aus und drücken Sie über den ausgecheckten Zweig zu diesem Zweig.
Wenn Sie Ihre lokale Niederlassung auf das neueste Commit in der vorgelagerten Niederlassung zurücksetzen möchten, funktioniert dies für mich bisher wie folgt:
Überprüfen Sie Ihre Fernbedienungen, stellen Sie sicher, dass Ihr Upstream und Ihre Herkunft Ihren Erwartungen entsprechen. Wenn nicht wie erwartet git remote add upstream <insert URL>
, verwenden Sie z. B. das ursprüngliche GitHub-Repo, von dem Sie sich gegabelt haben, und / oder git remote add origin <insert URL of the forked GitHub repo>
.
git remote --verbose
git checkout develop;
git commit -m "Saving work.";
git branch saved-work;
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force
Auf GitHub können Sie auch den Zweig mit demselben Namen wie den lokalen auschecken, um die Arbeit dort zu speichern. Dies ist jedoch nicht erforderlich, wenn die Ursprungsentwicklung dieselben Änderungen wie der lokale Zweig für gespeicherte Arbeit aufweist. Ich verwende den Entwicklungszweig als Beispiel, aber es kann ein beliebiger vorhandener Zweigname sein.
git add .
git commit -m "Reset to upstream/develop"
git push --force origin develop
Wenn Sie diese Änderungen dann bei Konflikten mit einem anderen Zweig zusammenführen müssen, um die Änderungen in der Entwicklung beizubehalten, verwenden Sie:
git merge -s recursive -X theirs develop
Während des Gebrauchs
git merge -s recursive -X ours develop
um die widersprüchlichen Änderungen von branch_name beizubehalten. Verwenden Sie andernfalls ein Mergetool mitgit mergetool
.
Mit all den Änderungen zusammen:
git commit -m "Saving work.";
git branch saved-work;
git checkout develop;
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force;
git add .;
git commit -m "Reset to upstream/develop";
git push --force origin develop;
git checkout branch_name;
git merge develop;
Beachten Sie, dass Sie anstelle von Upstream / Develop einen Commit-Hash, einen anderen Zweigstellennamen usw. verwenden können. Verwenden Sie ein CLI-Tool wie Oh My Zsh, um zu überprüfen, ob Ihr Zweig grün ist und anzeigt, dass nichts festgeschrieben werden muss und das Arbeitsverzeichnis sauber ist ( was bestätigt oder auch überprüfbar ist durch git status
). Beachten Sie, dass dies tatsächlich im Vergleich Commits hinzufügen kann entwickeln Upstream , wenn es etwas hinzugefügt wird , automatisch von einem Commit, zB UML - Diagramme, Lizenz - Header usw., so dass in diesem Fall könnten Sie dann ziehen Sie die Änderungen an , origin develop
um upstream develop
, wenn nötig.
git status
Ihres zweiten Befehlsgit reset --hard HEAD
fehlgeschlagen. Sie haben die Ausgabe jedoch nicht eingefügt. → Unvollständige Frage.