it-swarm.com.de

So entfernen Sie versehentliche Verzweigung in TortoiseHg?

(Ich bin ein relativer Neuling in TortoiseHg, nehmen Sie es mit :-) Ich verwende TortoiseHg auf zwei Computern, um mit meinem Remote-Quell-Repository zu kommunizieren. Ich habe auf einem Computer Änderungen vorgenommen, sie festgeschrieben und versucht, sie in das Remote-Repository zu verschieben, aber ich habe vergessen, zuerst einen Pull durchzuführen, um den neuesten Code zuerst abzurufen. Der Push gab mir ein paar Zeilen Ausgabe, was darauf hindeutete, dass ich vergessen habe, zuerst zu ziehen (wahr!) Und etwas wie "Abbrechen: Push erstellt neue entfernte Zweige ..." erwähnte.

Also habe ich einen Pull ausgeführt, der dem Kopf meines Diagramms im Repository-Explorer mehrere Knoten hinzufügte. Das Problem ist, dass der Push, den ich versucht habe, jetzt im Repository-Explorer als Zweig angezeigt wird. Von der Serverseite (Codeplex) aus gesehen zeigt es keine Anzeichen meines versuchten Pushs an, was darauf hinweist, dass dieser versehentliche Zweig auf meinem Computer immer noch lokal ist.

Wie könnte ich diesen zufälligen Zweig entfernen? Ich habe versucht, diesen Knoten in der Grafik auszuwählen und dann "zurücksetzen", aber es schien nichts zu tun. Ich frage mich, ob es am einfachsten wäre, einfach meinen Verzeichnisbaum auf meinem lokalen Computer zu verwerfen und einen völlig neuen, sauberen Pull vom Server durchzuführen ...?

21
Michael Sorens

Stellen Sie zunächst sicher, dass Sie alle Ihre lokalen Änderungen übernommen haben. Führen Sie dann die Zweige zusammen, indem Sie hg merge aufrufen und das Ergebnis festschreiben.

Dies sollte Sie zu einem einzelnen Zweig zurückbringen und die beiden Köpfe wieder vereinen.

17
sth

Ich hatte einen Zweig, den ich nicht wollte, fand aber heraus, dass ich den Zweig nicht zusammenführen konnte (oder es war sehr schwierig für mich, herauszufinden, wie ich ihn zusammenführen sollte), weil er einen Konflikt enthielt, der auf einer Änderung des Dateinamens beruhte.

Letztendlich habe ich mich für hg commit --close-branch entschieden. Da der Zweig nur auf meinem lokalen Repo existiert hatte und nicht auf dem Repo, von dem ich geklont hatte, machte sich der nachfolgende hg Push nicht einmal die Mühe, den geschlossenen Zweig zum Master-Repo hinauszuschieben! Sehr angenehm. Zu diesem Zeitpunkt musste ich nur mein lokales Repo löschen und erneut vom "Master" klonen, um es vollständig zu beseitigen.

7
user1593861

Führen Sie eine "Zusammenführung mit" durch und aktivieren Sie "Alle Änderungen aus der (anderen) Zusammenführungsziel-Revision verwerfen". Natürlich sollten Sie sicherstellen, dass das als Zusammenführungsziel angezeigte Ziel wirklich das ist, das Sie wegwerfen möchten, bevor Sie auf die Schaltfläche Zusammenführen klicken.

5
mhenry1384

Wählen Sie im Repository-Explorer die erste Version Ihrer lokalen Änderungen aus, klicken Sie dann mit der rechten Maustaste auf die Spitze des Zweigs, den Sie gerade gezogen haben, und wählen Sie je nach Bedarf "Neu über Ausgewählt" oder "Verlauf ändern-> Neu über Ausgewählt" Client-Version. Dadurch werden Ihre Umdrehungen auf die gezogenen zurückgesetzt.

Darüber hinaus, um es in Zukunft zu vermeiden ...

Wählen Sie im Repository-Explorer Extras-> Einstellungen. Wählen Sie in der Dropdown-Liste oben links "Globale Benutzereinstellungen" aus, damit dies für alle Repositorys gilt. Wählen Sie dann links Synchronisieren. In "After Pull Operation" wählen Sie "Rebase". Dies führt dazu, dass Ihre lokalen Revisionen auf den soeben abgerufenen Revisionen "basieren", anstatt sie in einem anderen Zweig zu belassen.

So mache ich das und wahrscheinlich ist es das, was Sie normalerweise wollen.

Weitere Informationen finden Sie im Rebase-Projekt und in der Rebase-Erweiterung .

2
Kyle Heironimus

So geht's mit dem Kommandozeilen-Tool. Ich vermute, es kann leicht auf TortoiseHg abgebildet werden (obwohl ich nicht sicher bin, da ich es nie benutze ...). Wie auch immer, da es nur ab und zu gemacht werden sollte, denke ich, dass es hier kein Problem gibt, das Terminal zu benutzen .

Ein Beispielsetup

Angenommen, Ihr Remote-Repository sieht ungefähr so ​​aus:

@  changeset:   3:a4c18a1fba12
|  tag:         tip
|  summary:     commit 4
|
o  changeset:   2:91c5dbfba15c
|  summary:     commit 3
|
o  changeset:   1:4c77cb7952ea
|  summary:     commit 2
|
o  changeset:   0:085dae46f27e
   summary:     commit 1

Vor Ort hatten Sie kein Commit 4, also haben Sie etwas direkt über Commit 3 festgeschrieben:

@  changeset:   3:39526003350f
|  tag:         tip
|  summary:     commit 4 made locally
|
o  changeset:   2:91c5dbfba15c
|  summary:     commit 3
|
o  changeset:   1:4c77cb7952ea
|  summary:     commit 2
|
o  changeset:   0:085dae46f27e
   summary:     commit 1

Also versuchst du es zu pushen und bekommst diese Nachricht:

$ hg Push
pushing to ssh://[email protected]/brandizzi/Mercurial-test-repo
searching for changes
remote has heads on branch 'default' that are not known locally: a4c18a1fba12
abort: Push creates new remote head 39526003350f!
(pull and merge or see "hg help Push" for details about pushing new heads)

Wie gewünscht ziehen Sie es:

$ hg pull
pulling from ssh://[email protected]/brandizzi/Mercurial-test-repo
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
(run 'hg heads' to see heads, 'hg merge' to merge)

Du hast es jetzt ...

o  changeset:   4:a4c18a1fba12
|  summary:     commit 4
|
| @  changeset:   3:39526003350f
|/   summary:     commit 4 made locally
|
o  changeset:   2:91c5dbfba15c
|  summary:     commit 3
|
o  changeset:   1:4c77cb7952ea
|  summary:     commit 2
|
o  changeset:   0:085dae46f27e
   summary:     commit 1

... aber Sie möchten lieber nicht wie gewünscht zusammenführen. Sie möchten dies stattdessen haben:

o  changeset:   4:a4c18a1fba12
|  summary:     commit 4 made locally
|
o  changeset:   3:a4c18a1fba12
|  summary:     commit 4
|
o  changeset:   2:91c5dbfba15c
|  summary:     commit 3
|
o  changeset:   1:4c77cb7952ea
|  summary:     commit 2
|
o  changeset:   0:085dae46f27e
   summary:     commit 1

Und dann wollen Sie es auf die Fernbedienung Repo schieben.

Wie kommst du darauf?

Löse es

Um das zu bekommen, können Sie nicht das "Festschreiben 4 lokal gemacht" gedrückt haben. Es gibt auch keine Möglichkeit, es nach den neuen Remote-Commits zu platzieren. Gesagt, wir können bekommen, was wir gefragt haben.

Das heißt, Sie müssen nur Ihr lokales Commit auf das neue Remote-Commit zurückführen:

$ hg rebase --source 3 --dest 4

Wenn Sie Glück haben, ist das genug.

Umgang mit Konflikten

Wenn Sie Pech haben, kann es zu Konflikten kommen:

$ hg rebase --source 3 --dest 4
rebasing 3:39526003350f "commit 4 made locally"
merging test.txt
warning: conflicts while merging test.txt! (edit, then use 'hg resolve --mark')
unresolved conflicts (see hg resolve, then hg rebase --continue)

Lösen Sie dann einfach die Konflikte (indem Sie sie manuell bearbeiten):

$ hg st
M test.txt
$ nano test.txt # Edit and save

... markiere die Datei als gelöst ...

$ hg resolve --mark
(no more unresolved files)
continue: hg rebase --continue

... und mache mit dem Rebase weiter:

 $ hg rebase --continue
rebasing 3:39526003350f "commit 4 made locally"
saved backup bundle to /home/adam/software/Mercurial-test-repo/.hg/strip-backup/39526003350f-64863882-backup.hg

Hier ist deine neue Geschichte:

@  changeset:   4:ca31fe8a15f0
|  summary:     commit 4 made locally
|
o  changeset:   3:a4c18a1fba12
|  summary:     commit 4
|
o  changeset:   2:91c5dbfba15c
|  summary:     commit 3
|
o  changeset:   1:4c77cb7952ea
|  summary:     commit 2
|
o  changeset:   0:085dae46f27e
   summary:     commit 1

Jetzt drück es:

$ hg Push
pushing to ssh://[email protected]/brandizzi/Mercurial-test-repo
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files

Damals ist es nicht mehr so ​​komplex wie früher, oder? :)

0
brandizzi