Manchmal wird der QA (oder Staging) Branch so sehr mit Experimenten überladen, dass es einfacher ist, nicht zu versuchen, alle Konflikte zu lösen, sondern ihn einfach zu einer exakten Kopie von main (master) zu machen.
Dafür sind zwei Befehle ausreichend:
git reset --hard origin/main
git push --force-with-lease
Beispiel:
git reset --hard origin/main
HEAD ist jetzt bei 46911f2 Fixed main page search
git push --force-with-lease
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
To https://github.com/username/sandbox.git
+ 53cda29...46911f2 staging -> staging (forced update)
Was passiert:
- git reset --hard origin/main setzt den aktuellen lokalen Branch vollständig auf denselben Commit wie origin/main. Alle lokalen Commits und ungespeicherten Änderungen gehen verloren.
- git push --force-with-lease aktualisiert den entfernten QA/Staging-Branch und macht ihn zu einer exakten Kopie von main.
Warum --force-with-lease und nicht --force?
Weil dieser Befehl etwas sicherer ist. Git überprüft, dass niemand nach Ihrem letzten Fetch neue Commits gepusht hat. Wenn sich der entfernte Branch geändert hat, wird der Push abgelehnt, anstatt stillschweigend die Arbeit anderer zu überschreiben.
⚠️ Tun Sie dies nur, wenn Sie wirklich die gesamte Geschichte des QA/Staging-Branches vollständig überschreiben möchten. Nach einem solchen Push werden alle Commits, die nicht in main sind, nicht mehr Teil dieses Branches sein.
GUI-Anwendungen wie Github Desktop zeigen diese Änderungen möglicherweise nicht an. Möglicherweise müssen Sie die Anwendung neu starten oder zwischen den Branches "springen", damit die Änderungen angezeigt werden.