1267 Stimmen

Wie kann man in Git den lokalen Zweig vollständig durch einen entfernten Zweig ersetzen?

Ich habe zwei Zweige:

  1. die örtliche Zweigstelle (diejenige, mit der ich arbeite)
  2. Remote-Zweig (öffentlich, nur gut getestete Übertragungen gehen dorthin)

Kürzlich habe ich meine örtliche Niederlassung ernsthaft in Schwierigkeiten gebracht.

Wie kann ich den lokalen Zweig vollständig durch den entfernten Zweig ersetzen, so dass ich meine Arbeit dort fortsetzen kann, wo der entfernte Zweig jetzt ist?

Ich habe bereits SO gesucht und das lokale Auschecken in den entfernten Zweig hat keinen Effekt.

10voto

Joshua S Punkte 173

Der sicherste und vollständigste Weg, den aktuellen lokalen Zweig durch den entfernten zu ersetzen:

git stash
git merge --abort
git rebase --abort
git branch -M yourBranch replaced_yourBranch
git fetch origin yourBranch:yourBranch
git checkout yourBranch

En stash Zeile speichert die Änderungen, die Sie nicht bestätigt haben. Die Seite branch Zeile verschiebt Ihre Verzweigung auf einen anderen Namen, wodurch der ursprüngliche Name frei wird. Die fetch Zeile ruft die letzte Kopie der Fernbedienung ab. Die checkout Zeile wird der ursprüngliche Zweig als Verfolgungszweig wiederhergestellt.

Oder als Bash-Funktion:

replaceWithRemote() {
    yourBranch=${1:-`git rev-parse --abbrev-ref HEAD`}
    git stash
    git merge --abort
    git rebase --abort
    git branch -M ${yourBranch} replaced_${yourBranch}_`git rev-parse --short HEAD`
    git fetch origin ${yourBranch}:${yourBranch}
    git checkout ${yourBranch}
}

was den aktuellen Zweig in etwas wie replaced_master_98d258f umbenennt.

9voto

Amit Kaneria Punkte 4872

Es gibt mehrere Möglichkeiten, diese Antwort weiter zu bearbeiten, um eine bessere Wissensperspektive zu verbreiten.

1) Hartes Zurücksetzen

Wenn Sie von einem entfernten Entwicklungszweig aus arbeiten, können Sie HEAD auf den letzten Commit im entfernten Zweig zurücksetzen (siehe unten):

git reset --hard origin/develop

2) Löschen Sie den aktuellen Zweig, und checken Sie erneut aus dem entfernten Repository aus

Wenn Sie an einem Entwicklungszweig im lokalen Repository arbeiten, der mit dem Remote/Entwicklungszweig synchronisiert wird, können Sie wie folgt vorgehen:

git branch -D develop
git checkout -b develop origin/develop

3) Zusammenführung abbrechen

Wenn Sie sich zwischen einer schlechten Zusammenführung befinden (fälschlicherweise mit dem falschen Zweig) und die Zusammenführung vermeiden wollen, gehen Sie zurück zum neuesten Zweig wie unten:

git merge --abort

4) Rebase abbrechen

Wenn Sie sich zwischen einer fehlerhaften Umbasierung befinden, können Sie die Umbasierungsanforderung wie folgt abbrechen:

git rebase --abort

2voto

ksol Punkte 11360

Sie können tun, was @Hugo von @Laurent sagte, oder Sie können git rebase um die Übertragungen zu löschen, die Sie loswerden wollen, wenn Sie wissen, welche das sind. Ich neige dazu, zu verwenden git rebase -i head~N (wobei N eine Zahl ist, die es Ihnen erlaubt, die letzten N Commits zu manipulieren) für diese Art von Operationen.

2voto

Tom Stickel Punkte 18167

En ausgewählte Antwort ist absolut korrekt aber es hat mich nicht mit den letzten Commits/Pushes zurückgelassen ...

Also für mich:

git reset --hard dev/jobmanager-tools
git pull  ( did not work as git was not sure what branch i wanted)

Da ich weiß, dass ich meinen Upstream-Zweig vorübergehend für ein paar Wochen auf einen bestimmten Zweig setzen möchte (derselbe wie der, zu dem ich zuvor gewechselt / ausgecheckt und einen Hard Reset durchgeführt habe)

だから NACH dem Zurücksetzen

git branch --set-upstream-to=origin/dev/jobmanager-tools
git pull
git status    ( says--> on branch  dev/jobmanager-tools

1voto

kqr Punkte 396

Wenn Sie einen Zweig aktualisieren wollen, der noch nicht ausgecheckt ist, können Sie dies tun:

git fetch -f origin rbranch:lbranch

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