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?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.
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
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.
- See previous answers
- Weitere Antworten anzeigen