Wir haben ein Problem mit unserem GitHub-Repository. Ich werde unseren Workflow erklären:Git fehlt Code nach dem Zusammenführen
Entwickler erstellen Feature/Bug-Fix-Filialen aus der Haupt-Zweigstelle. Sie ziehen ihre Änderungen an, um sie wieder zusammenzuführen. Sie können von der Hauptniederlassung rebasen, um die neuesten Aktualisierungen von ihnen zu erhalten, wenn sie funktionieren. Nach einer Rebase drücken sie --force auf ihren Feature-Zweig.
Zwei Pull-Requests wurden kürzlich über die GitHub-Webschnittstelle automatisch zusammengeführt. Anschließend - etwa zwei Tage nach dem Zusammenführen der Anfrage - wurde festgestellt, dass die Änderungen in diesen Commits nicht im Code waren. Nichts in der Geschichte deutet darauf hin, dass diese Änderungen rückgängig gemacht oder überschrieben wurden. Die Zusammenführungen selbst erscheinen nicht in der Commit-Historie und die einzelnen Commits selbst erscheinen auch nicht. Aber die Pull-Anforderung wurde erfolgreich zusammengeführt. Einer der fehlenden Commits steht nicht mehr zur Verfügung. Wenn wir es versuchen, erhalten wir eine fatal - bad object Meldung.
Wir vermuten, dass etwas Neuschreiben der Geschichte passiert ist. Wie können wir herausfinden und wie können wir dies verhindern? Gibt es etwas grundsätzlich falsch mit unserem Workflow?
Haben Sie den Reflog um die Zeit inspiziert, dass dies passiert ist? Es könnte einige Hinweise darauf geben, was vor sich geht. Im Allgemeinen gilt Force Push jedoch als eine schlechte Idee. Wenn sie nach der Zusammenführung zum Feature-Zweig gedrängt werden, bin ich mir nicht sicher, was passieren würde, obwohl ich denken würde, dass sie das Commit auf dem Master-Zweig nicht verlieren sollte. Erinnert sich jemand daran, dass er versehentlich zur Hauptlinie gedrängt wurde - kann er keine andere offensichtliche Möglichkeit sehen, die passieren könnte. – MattJenko
Ich habe kürzlich Github gemailt wegen eines ähnlichen Problems (einer der anderen Entwickler hat gedrängt, ohne jemanden zu fragen), ob es möglich ist, Force Push in Github Repo zu verbieten, sie sagten, dass es jetzt nicht konfigurierbar ist, aber wenn wir verloren haben Einige Commits, wir können GH kontaktieren, um Hilfe zu holen, um sie wiederherzustellen. Normalerweise sollten alle verwaisten Commits im Reflog in GH sowie im lokalen Repo des Entwicklers sein, der die Pull-Anfrage initiiert hat - bis der Müll automatisch oder manuell gesammelt wird. –
Siehe hier für ähnliche Sache: http://StackOverflow.com/Questions/5094524/Github-prevent-colaborator-from-Push-F Scheint GitHub ist nicht sehr daran interessiert, es zu implementieren. Für die Zukunft können Sie entweder 1) Zwischen Repo, Empfangen von Dingen, mit verschiedenen Haken eingerichtet, die nach Github drücken, wenn alles in Ordnung ist, 2) Beschränke die Anzahl der Personen erlaubt zu zentralen Repo (vielleicht nur 1 Person, rotieren jeweils Woche usw.). Ich bin mir bewusst, dass diese Antwort möglicherweise nicht zufriedenstellend ist. –