1063 Stimmen

Verschieben des Zweigzeigers auf eine andere Übertragung ohne Auschecken

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)?

1443voto

Chris Johnsen Punkte 199970
git branch --force <branch-name> [<new-tip-commit>]

Si new-tip-commit weggelassen wird, wird der aktuelle Commit als Standardwert verwendet.

new-tip-commit kann ein Zweigname sein (z. B. master, origin/master).

636voto

Adam A Punkte 14140

Sie können dies für beliebige Schiedsrichter tun. So verschiebt man einen Verzweigungszeiger:

git update-ref -m "reset: Reset <branch> to <new commit>" refs/heads/<branch> <commit>

donde -m fügt dem Reflog für den Zweig eine Nachricht hinzu.

Die allgemeine Form lautet

git update-ref -m "reset: Reset <branch> to <new commit>" <ref> <commit>

Man kann über die Reflog-Meldung meckern, wenn man will - ich glaube, die branch -f eine ist anders als die reset --hard eine, und das ist nicht gerade eine von ihnen.

169voto

Amiel Martin Punkte 4470

Sie können auch git reset --hard eine Commit-Referenz.

Zum Beispiel:

git checkout branch-name
git reset --hard new-tip-commit

Ich stelle fest, dass ich so etwas halbwegs häufig mache:

Angenommen, diese Geschichte

$ git log --decorate --oneline --graph
* 3daed46 (HEAD, master) New thing I shouldn't have committed to master
* a0d9687 This is the commit that I actually want to be master

# Backup my latest commit to a wip branch
$ git branch wip_doing_stuff

# Ditch that commit on this branch
$ git reset --hard HEAD^

# Now my changes are in a new branch
$ git log --decorate --oneline --graph
* 3daed46 (wip_doing_stuff) New thing I shouldn't have committed to master
* a0d9687 (HEAD, master) This is the commit that I actually want to be master

72voto

Matheus Felipe Punkte 2203

Nur um die Diskussion zu bereichern, wenn Sie die myBranch Zweig zu Ihrem aktuell commit, lassen Sie einfach das zweite Argument nach -f

Ejemplo:

git branch -f myBranch


Ich tue dies im Allgemeinen, wenn ich rebase im Zustand "Abgetrennter Kopf" :)

30voto

alondono Punkte 2404

Mit Git 2.23.0 wurde die git-switch Befehl, der ebenfalls für diese Aufgabe verwendet werden kann.

git switch -C <branch-name> [<start-point>]

Le site -C (Großbuchstabe C) zeigt an, dass, wenn <branch-name> bereits vorhanden ist, wird es zurückgesetzt auf <start-point> .

Mit -c (Kleinbuchstabe C) wird versucht, einen neuen Zweig zu erstellen, was jedoch fehlschlägt, wenn bereits einer existiert.

<start-point> kann eine Raute, ein Tag oder ein anderer Zweigname sein.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X