So wird es mit dem Befehlszeilentool gemacht. Ich denke, es kann leicht zu TortoiseHg gemappt werden (obwohl ich nicht sicher bin, da ich es nie verwende ...) Wie auch immer, da es nur einmal gemacht werden sollte, denke ich, dass es hier kein Problem gibt, das Terminal zu benutzen .
Ein Beispiel Setup
Angenommen, Ihr Remote-Repository so etwas wie dieses:
@ 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
Lokal nicht 4 verpflichten hatte, so dass Sie direkt begehen etwas begangen mehr als 3:
@ 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
So versuchen Sie es zu drücken, und erhalten Sie 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)
Sie haben 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 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 möchten Sie es auf die Remote-Repo schieben.
Wie bekommen Sie das?
Solving es
das zu bekommen, Sie nicht gedrückt haben, die "commit 4 lokal gemacht". Auch gibt es keine Möglichkeit, es nach die neuen remote commits zu setzen. Sagte, dass wir bekommen können, was wir gefragt haben.
sagte, Sie müssen nur Ihre lokalen auf die neue Fern begehen rebase begehen:
$ hg rebase --source 3 --dest 4
Wenn Sie Glück haben, das genug sein wird.
Konfliktbehandlung
Wenn Sie Pech haben, können Sie einige Konflikte haben:
$ 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)
Dann lösen Sie einfach die Konflikte (durch manuell bearbeiten):
$ hg st
M test.txt
$ nano test.txt # Edit and save
.. .Markiere die Datei als aufgelöst ...
$ hg resolve --mark
(no more unresolved files)
continue: hg rebase --continue
... und fahren Sie mit dem Fütterungsmaterial:
$ 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 Ihre 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
Nun schieben Sie 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
Diese Tage, ist es nicht als komplex wie es einmal war, oder?:)
Das klingt wie die Filiale wird noch da sein, ja? Ich hoffe, den Zweig komplett zu entfernen, da ich ihn noch nicht dauerhaft auf dem Server eingerichtet habe. –
@msorens: Die zwei Changesets, die "parallel" begangen wurden, bleiben so, aber ist das wichtig? Beim Zusammenführen werden die beiden Zweige in einer einzigen Top-Revision zusammengefügt. Von nun an wird es wieder nur eine einzige neueste Revision geben, obwohl sie in ihren Vorgängern eine kurze Verzweigung in zwei Zweige hat. – sth
@msorens: Ich stimme etw. Zu. Nach einer Weile mit Mercurial merkt man, dass es sich nicht lohnt, die Revisionshistorie quietsch sauber zu halten. Es spielt keine Rolle, dass die Changesets nicht in der richtigen Reihenfolge zwischen Ihrem Server und Ihren lokalen Repos liegen oder dass Sie eine kurzlebige anonyme Verzweigung haben (beides ist zu erwarten, wenn mehr als eine Person an einem Projekt arbeitet)). –