Erstens: Sie sollten dies nur tun, für einen Zweig, dem Sie nicht teilen; Wenn die Zweigstelle von anderen Benutzern ausgecheckt wird, werden durch diesen Prozess ihre lokalen Kopien nicht mehr mit der Gegenstelle synchronisiert und sie können nicht mehr nur Commits in den Zweig schieben. Dies kann aussortiert werden, aber es ist möglicherweise ein Durcheinander.
Da, wenn ich Sie richtig verstehe, Sie in dieser Situation sind:
xxxxxxx Bad commit #3
yyyyyyy Bad commit #2
zzzzzzz Bad commit #3
wwwwwww This and everything before it are fine
Sie wollen entsprechen den Commits nach wwwwwwww
und fixieren die Fern Zweig fallen zu lassen.
Als Erstes sichern Sie den Zweig, in dem Sie operieren, so dass Sie ihn wiederherstellen können, wenn Sie Fehler machen, und dann zu dem Zweig zurückkehren, von dem Sie die Commits entfernen möchten.
git checkout -b broken-estimation
git checkout estimation
Run git log
die SHA1 des ersten finden Sie behalten möchten verpflichten. Sobald Sie das SHA1 haben, setzen Sie den Zweig an, dass:
git reset --hard kkkkkkk
wo kkkkkk
die SHA1 des ersten ist verpflichten Sie auf dem Zweig halten wollen.
Führen Sie erneut git log
aus, um sicherzustellen, dass Sie die gewünschte SHA1 als die Spitze dieser Verzweigung haben; Es sollte das erste Commit sein, das Sie in der git log
Ausgabe sehen. Wenn Sie die Anzahl der Commits nicht verringert haben, wiederholen Sie die git reset --hard
mit dem richtigen SHA1, um weitere Commits zu entfernen.
Wenn Sie zu viele Commits entfernt, stellen Sie die estimation
Zweig aus dem Backup Sie nahm:
git checkout -B estimation broken-estimation
und die git log
wiederholen Sie den SHA1 des begehen finden Sie an der Spitze wollen, gefolgt von git reset --hard kkkkkkk
(mit kkkkkkk
ist die SHA1, die Sie wirklich wollten), um die unerwünschten Commits nach diesem Commit zu löschen.
Sobald Sie den Zweig in den gewünschten Zustand haben, können Sie den festen Zweig auf der Fernbedienung drücken, die alte Version zu ersetzen:
git push -f the_proper_remote estimation
Sobald Sie sicher sind, dass Ihre Reparaturen korrekt sind, können Sie die Sicherungskopie der Branche löschen:
git branch -d broken-estimation
können Sie nach dieser Antwort suchen: http://StackOverflow.com/a/1470452/1475228 –