2017-04-11 4 views
0

Ich habe zwei Zweige A und B. Ich möchte A mit B zusammenführen. Ich lief git fetch Befehl irrtümlich. Ich möchte es rückgängig machen. Gibt es einen Befehl dazu?Undo Abruf Befehl beim Zusammenführen von Zweigen

+1

Es gibt keine Notwendigkeit, jeden 'git fetch' rückgängig zu machen, da dies nie etwas beeinflusst * Sie * arbeiten, bringt es nur in von * jemand verpflichtet sonst *. – torek

+0

Warum denken Sie, dass Sie den Abruf rückgängig machen müssen? Welches Problem versuchen Sie zu lösen? –

+0

Ist einer Ihrer beiden Zweige 'A' oder' B' eine entfernte Niederlassung? – LeGEC

Antwort

0

Es ist difficult1 auf „Rückgängig“ ein git holen, aber es gibt keinen Grund never2 ein git holen rückgängig machen zu müssen.

Denken Sie daran, was git fetch ist, rufen Sie die remote auf, rufen Sie eine Liste von Branch-Name zu SHA-1-Mappings, bringen Sie Commits und andere Objekte, die Sie in Ihrem Repository speichern müssen, und aktualisieren Sie dann Remote-Tracking von Zweigstellen, so dass sie auf die aktuelle Zweigstelle (ab dem Zeitpunkt, an dem Sie gerade angerufen haben) auf Zweigstellen-Tipps zeigen. Dies hat keine Auswirkungen auf Ihre Arbeitsbaumdateien, und wenn Sie morgen git fetch erneut ausführen, kann jede heute ausgeführte Arbeit morgen übersprungen werden. Wenn du es schaffst, den Abruf rückgängig zu machen, muss der eine Lauf morgen die Arbeit, die heute erledigt wird, wiederholen, also ist das ein Nettoverlust: du hast nur etwas Mühe investiert, damit dein Gitarrist morgen mehr Code über das Netzwerk bringen muss .

Das sagte, Zeit für Fußnoten. :-)

1Es ist nicht so schwierig, wenn Sie Remote-Reflogs haben (was Sie wahrscheinlich tun): Verwenden Sie die Remote-Reflogs, um Remote-Tracking-Zweige zu finden, die im letzten Abruf aktualisiert wurden - diese Informationen sind möglicherweise auch noch verfügbar die Datei FETCH_HEAD - und verwenden Sie dann git update-ref, um diese Referenzen auf ihre vorherigen Reflog-Einträge zu verweisen. Aber damit bleiben die geholten Objekte in Ihrem Repository. Um sie wirklich zu löschen, müssen Sie dann auch die Zwischen-Reflog-Einträge löschen und dann git gc --prune = now ausführen, was sehr viel Sorgfalt erfordert und alles verwerfen wird nicht referenzierte Objekte, nicht nur solche, die vom letzten Abruf mitgebracht wurden.

2Ich denke, man könnte argumentieren, dass "knapper Speicherplatz auf der Festplatte" ein Grund dafür sein könnte, insbesondere wenn ein großes Objekt versehentlich zur Fernbedienung geschoben wurde und beim nächsten Abruf von der Fernbedienung entfernt wird. Das Arbeiten in einem Dateisystem, das nicht über genügend Platz verfügt, ist jedoch im Allgemeinen schwierig und ich bin mir nicht sicher, ob ich hier viel anderes tun möchte, als das gesamte Repository an einen anderen Ort zu verschieben (irgendwo ohne Probleme mit dem Speicherplatz).

von How to undo 'git fetch'

Verwandte Themen