Reset anderen Zweig zu Strom ohne Kasse
Schreibe ich einige scripts für mein Git-workflow.
Muss ich reset anderen (bestehenden) verzweigen, um die aktuellen ein, ohne Kasse.
Bevor:
CurrentBranch: commit A
OtherBranch: commit B
Nach:
CurrentBranch: commit A
OtherBranch: commit A
Äquivalent
$ git checkout otherbranch
$ git reset --soft currentbranch
$ git checkout currentbranch
(Hinweis:--soft
: ich will nicht zu beeinflussen, arbeiten, Baum.)
Ist das möglich?
- Weiß jemand, ob dies auch möglich in Egit?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die workflows, die Sie beschreiben, sind nicht gleichwertig: bei
reset --hard
verlieren Sie alle änderungen im working tree (möchten Sie vielleicht, um esreset --soft
).Was Sie brauchen, ist
refs/heads/
...git push . current:other
. Dies funktioniert ohnerefs/heads
(/cc @elliottcable), und es verhindert auch, dass Sie von der Aktualisierung der ausgecheckten branch. Beachten Sie, dass Sie brauchen, um passieren -f (oder verwenden Sie+current:other
) wenn das update nicht einem fast-forward.-m 'some text'
argument Datensatz der Grund für die ref-update angezeigt werden, indemgit reflog OtherBranch
Befehl, wie beispielsweise "synchronisiert, um CurrentBranch". Kann nützlich sein, daran zu erinnern, warum hast du es später.git update-ref refs/heads/OtherBranch refs/heads/CurrentBranch
odergit push . CurrentBranch OtherBranch
wenn Sie verwenden könnte, die viel sauberer ist (IMO)git branch -f OtherBranch CurrentBranch
statt? (Siehe meine Antwort auf git branch -f unten)Set
otherbranch
auf den gleichen commit wiecurrentbranch
durch ausführenDen
-f
(force) option sagtgit branch
ja, ich meine wirklich, überschreiben alle vorhandenenotherbranch
Referenz-mit der neuen.Aus der Dokumentation:
fatal: Cannot force update the current branch.
beim Versuch, dies zu tun.otherbranch
ausgecheckt. Diese Frage ALSO ist speziell zum zurücksetzen von andere Zweig auf einen anderen commit (also nicht zurücksetzen, die checked-out branch). Was Sie tun möchten, ist setzen Sie den aktuellen Zweig mitgit reset targetbranch
zu zwingen, den aktuellen Standort zeigte auftargetbranch
. Hinzufügen--hard
zu zwingen, die Arbeit, die Struktur der Inhalte. Oder--soft
verlassen den index allein und ändern Sie nur die Branche selbst.branch -f
tun könnte.git checkout -B master upstream/master
das funktioniert unabhängig davon, ob der master ist lokal ausgecheckt. Aber es wird auch schalten Sie das Zweig, zu meistern. Wenn Sie lokale änderungen haben im Arbeitsbereich, wahrscheinlich schlecht.git branch -f
tun gegen die Aktualisierung des aktuellen Zweiges einschließlich der Arbeitsfläche, die ist, wasgit reset
undgit checkout
tun, da es nicht erlaubt zu ändern, den ausgecheckten branch. Beachten Sie, dass Git nicht lassen Sie push zu einem remote-aktuell ausgecheckten branch.Können Sie synchronisieren Sie mit diesem Befehl Ihre Filialen jederzeit
Auch ohne -f ersetzt diese Befehle
Kann es nützlich sein, wenn Sie nicht brauchen, verpflichten sich, alle Ihre Dateien in CurrentBranch und so können Sie nicht wechseln Sie zu einem anderen Zweige.
-f
option, es sei denn, es ist absolut unvermeidlich. Es funktioniert gut, ohne dass es in meinem Fall.