Um den Verzweigungszeiger eines ausgecheckten Zweiges zu verschieben, kann man die git reset --hard
Befehl. Aber wie kann man den Zweigzeiger eines nicht ausgecheckten Zweigs so verschieben, dass er auf einen anderen Commit zeigt (wobei alle anderen Dinge wie der verfolgte entfernte Zweig erhalten bleiben)?
Antworten
Zu viele Anzeigen?Wenn Sie einen nicht ausgecheckten Zweig auf einen anderen Commit verschieben wollen, ist es am einfachsten, den Befehl git branch mit der Option -f auszuführen, die bestimmt, wohin der Zweig HEAD zeigen soll:
git branch -f <branch-name> (<sha1-commit-hash> or <branch-name>)
Zum Beispiel, wenn Sie möchten, dass Ihr lokaler Entwicklungszweig den entfernten (Ursprungs-)Entwicklungszweig verfolgt:
git branch -f develop origin/develop
Seien Sie vorsichtig, da dies nicht funktioniert, wenn der Zweig, den Sie verschieben wollen, Ihr aktueller Zweig ist. Um einen Zweigzeiger zu verschieben, führen Sie den folgenden Befehl aus: git update-ref -m "reset: Zurücksetzen auf " refs/heads/
Mit dem Befehl git update-ref wird der in einem ref gespeicherte Objektname sicher aktualisiert.
Ich hoffe, meine Antwort hat Ihnen geholfen, die Informationsquelle ist dieser Ausschnitt .
En gitk --all
:
- Rechtsklick auf die gewünschte Übergabe
- -> neue Verzweigung erstellen
- den Namen eines bestehenden Zweigs eingeben
- drücken Sie die Eingabetaste in dem Dialog, der bestätigt die Ersetzung des alten Zweigs dieses Namens .
Beachten Sie, dass die Neuerstellung statt der Änderung des bestehenden Zweigs verlieren die Informationen über die Verfolgungszweige . (Dies ist im Allgemeinen kein Problem für einfache Anwendungsfälle, bei denen es nur einen entfernten Zweig gibt und Ihr lokaler Zweig denselben Namen hat wie der entsprechende Zweig im entfernten Zweig. Siehe Kommentare für weitere Details, danke @mbdevpl für den Hinweis auf diesen Nachteil).
Es wäre cool, wenn gitk
hatte eine Funktion, bei der das Dialogfeld 3 Optionen enthielt: Überschreiben, Vorhandenes ändern oder Abbrechen.
Selbst wenn Sie normalerweise ein Kommandozeilen-Junkie sind wie ich, git gui
y gitk
sind für die Teilmenge der Git-Nutzung, die sie erlauben, recht gut geeignet. Ich empfehle dringend, sie für das zu verwenden, wofür sie gut sind (d.h. selektiv Hunks in den/aus dem Index in der Git-Gui zu schieben, und auch einfach zu committen. (ctrl-s zum Hinzufügen einer signed-off: Zeile, ctrl-enter zum Übertragen).
gitk
eignet sich hervorragend, um den Überblick über einige Zweige zu behalten, während Sie Ihre Änderungen zu einer schönen Patch-Serie zusammenstellen, die Sie dann an den Upstream übermitteln können, oder für alles andere, bei dem Sie den Überblick über Ihre Arbeit mit mehreren Zweigen behalten müssen.
Ich habe nicht einmal einen grafischen Dateibrowser geöffnet, aber ich liebe gitk/git gui.
Le site empfohlene Lösung git branch -f branch-pointer-to-move new-pointer
en TortoiseGit :
- "Git Show log"
- Prüfen Sie "Alle Zweigstellen".
- In der Zeile, in die der Verzweigungszeiger verschoben werden soll (new-pointer):
- Rechtsklick, "Zweig in dieser Version erstellen"
- Neben "Zweig" geben Sie den Namen des zu verschiebenden Zweigs ein (branch-pointer-to-move)
- Prüfen Sie unter "Base On", ob der neue Zeiger korrekt ist
- Prüfen Sie "Erzwingen".
- Ok
Ehrlich gesagt, bin ich überrascht, dass niemand an die git push
Befehl:
git push -f . <destination>:<branch>
Der Punkt ( . ) verweist auf das lokale Repository, und Sie benötigen möglicherweise die Option -f, da das Ziel sein könnte "hinter seinem entfernten Gegenstück" .
Obwohl dieser Befehl verwendet wird, um Ihre Änderungen auf Ihrem Server zu speichern, ist das Ergebnis genau dasselbe, als wenn Sie den entfernten Zweig ( <branch>
) auf denselben Commit wie der lokale Zweig ( <destination>
)
Öffnen Sie die Datei .git/refs/heads/<your_branch_name>
und ändern Sie den dort gespeicherten Hash in denjenigen, in den Sie den Kopf der Verzweigung verschieben wollen. Bearbeiten und speichern Sie die Datei einfach mit einem beliebigen Texteditor. Stellen Sie nur sicher, dass der zu ändernde Zweig nicht der derzeit aktive ist.
Haftungsausschluss: Wahrscheinlich ist das nicht ratsam, aber es erfüllt seinen Zweck.