2012-04-11 5 views
1

Mein Team hatte in letzter Zeit eine Menge Probleme mit GIT, weil die Pull-Befehle abgebrochen wurden.Warum wird GIT nicht bereinigt, wenn eine Zusammenführung abgebrochen wird, die durch das Einziehen von Änderungen ausgelöst wurde?

Wenn ein Benutzer lokale Änderungen nicht auf dem Index hat und einen Pull ausführt, habe ich gesehen, git Versuch, die Zusammenführung zu Master anzuwenden und abzubrechen. Der gesamte Checkout ist dann in einem schrecklichen Zustand, der fast nicht wiederherstellbar ist. In der Vergangenheit dachte ich, dass GIT eine Art von Überprüfung durchführen würde, um diese Probleme zu identifizieren, bevor es die Zusammenführung versucht.

Selbst mit einem sauberen Zustand (nichts zu begehen), habe ich das gleiche zufällig zufällig mindestens einmal passieren gesehen. Ich verstehe, dass Sie ohne Rebasieren möglicherweise gezwungen werden, Zusammenführungskonflikte zu lösen, wenn Sie ziehen, aber das ist nicht, was passiert.

Wir verwenden Gitolit. Ich benutze hauptsächlich Kommandozeile und muss noch auf diese Probleme stoßen. Der Rest des Teams benutzt die git-gui oder in einem Fall TortoiseGit.

git-gui Version 0.13.GITGUI
git Version 1.7.8.msysgit.0
Tcl/Tk Version 8.5.1
TortoiseGit 1.7.6.0

Wir sind nicht mit Niederlassungen so viel arbeiten wie wir könnten, aber fühlen, wie das funktionieren sollte.
Warum erlaubt Ihnen GIT zu versuchen, zu ziehen, wenn es zum Train-Wrack geht?
Warum bricht GIT nicht sauber ab?

+0

Im dritten Absatz, ich meine, ich habe gesehen, ein Repository aus dem Nichts zu gehen in einen abgesperrten Zustand zu begehen Git riss zu laufen und es abbricht, ohne in einen Merging-Zustand zu gehen. – user1326955

+0

Ich habe ähnliche Probleme und bis jetzt eine der wenigen Möglichkeiten, das Problem vorübergehend zu beheben, besteht darin, eine Sicherungskopie meiner vorhandenen funktionierenden lokalen Kopie an anderer Stelle zu erstellen und anschließend alles (einschließlich des .git-Verzeichnisses) zu löschen Verzeichnis. Dann sage ich git, um ein neues Repository zu erstellen und kann dann wieder aus dem Master-Repository "ziehen". – stealthyninja

Antwort

1

"git pull" ist das gleiche wie "git fetch + git merge". Also, wenn Git abbrechen, ist es auf einer Zusammenführung.

Wenn git versuchen, eine Verzweigung zusammenzuführen, tut es "so weit wie möglich". Die Dateien, die zusammengeführt werden können, werden zusammengeführt, und die Dateien, die nicht automatisch zusammengeführt werden können, verbleiben in einem Zustand "beide geändert". Der Entwickler muss die Dateien manuell überprüfen, um die Zusammenführung abzuschließen.

Wenn Sie lieber einen sauberen Zustand nach einem unvollständigen „git pull“ (oder „git merge“), können Sie einfach zurück zur letzten Revision vor der Zusammenführung kommen, mit dem Befehl:

git reset --hard my_local_branch 

In Ihr Fall, ich nehme an, dass "my_local_branch" "Master" ist.

+0

Dies ist der Teil von GIT, den ich ziemlich gut verstehe. Dies beantwortet jedoch nicht die Fragen, die ich gestellt habe. Dadurch werden alle nicht festgeschriebenen lokalen Änderungen entfernt. Dies bringt Sie auch nicht in einen sauberen Zustand, da Sie einen zusätzlichen Befehl ausführen müssen, um die nicht aufgezeichneten Dateien zu entfernen (wodurch der nächste Pull abgebrochen wird). – user1326955

Verwandte Themen