У мене є ряд змін, які я здійснив у своєму локальному сховищі, але його ще не було перенесено. Оскільки функція займає більше часу, ніж очікувалося, я хочу змінити ці зміни на названу гілку, перш ніж натиснути. Як я можу це зробити?
У мене є ряд змін, які я здійснив у своєму локальному сховищі, але його ще не було перенесено. Оскільки функція займає більше часу, ніж очікувалося, я хочу змінити ці зміни на названу гілку, перш ніж натиснути. Як я можу це зробити?
Відповіді:
Як запропонував Марк, MqExtension - це одне рішення для вас. Для IMHO більш простим робочим процесом є використання розширення ребаї . Припустимо, у вас є така історія:
@ changeset: 2:81b92083cb1d
| tag: tip
| summary: my new feature: edit file a
|
o changeset: 1:8bdc4508ac7b
| summary: my new feature: add file b
|
o changeset: 0:d554afd54164
summary: initial
Це означає, що перегляд 0
- це основа, над якою ви почали працювати над своєю функцією. 1-2
Скажімо, тепер ви хочете змінити названу гілку my-feature
. Оновіть до редакції 0
та створіть цю гілку:
$ hg up 0
$ hg branch my-feature
$ hg ci -m "start new branch my-feature"
Зараз історія виглядає так:
@ changeset: 3:b5939750b911
| branch: my-feature
| tag: tip
| parent: 0:d554afd54164
| summary: start new branch my-feature
|
| o changeset: 2:81b92083cb1d
| | summary: my new feature: edit file a
| |
| o changeset: 1:8bdc4508ac7b
|/ summary: my new feature: add file b
|
o changeset: 0:d554afd54164
summary: initial
Використовуйте rebase
команду для переміщення версій 1-2
на версію 3
:
$ hg rebase -s 1 -d 3
Результатом цього є наступний графік:
@ changeset: 3:88a90f9bbde7
| branch: my-feature
| tag: tip
| summary: my new feature: edit file a
|
o changeset: 2:38f5adf2cf4b
| branch: my-feature
| summary: my new feature: add file b
|
o changeset: 1:b5939750b911
| branch: my-feature
| summary: start new branch my-feature
|
o changeset: 0:d554afd54164
summary: initial
Це все .. як згадувалося в коментарях до відповіді Марка, переміщення вже натиснутих наборів змін взагалі є поганою ідеєю, якщо ви не працюєте в невеликій команді, де ви можете спілкуватися та застосовувати свої маніпуляції з історією.
fold
команду тепер вбудованого розширення histedit ).
hg log -G
( GraphlogExtension ). Я викреслив деякі рядки вручну, але це також могло бути візуалізовано повністю автоматично, використовуючи власні стилі журналу .
Ви можете використовувати MqExtension . Скажімо, набір змін для переміщення - це версії 1-3:
hg qimport -r 1:3 # convert revisions to patches
hg qpop -a # remove all them from history
hg branch new # start a new branch
hg qpush -a # push them all back into history
hg qfin -a # finalize the patches
Я вважаю за краще рішення патча, описане тут Марком Толонен
Що я маю:
hg log -G
#default branch
@ changeset: 3:cb292fcdbde1
|
o changeset: 2:e746dceba503
|
o changeset: 1:2d50c7ab6b8f
|
o changeset: 0:c22be856358b
Що я хочу:
@ changeset: 3:0e85ae268e35
| branch: feature/my_feature
|
o changeset: 2:1450cb9ec349
| branch: feature/my_feature
|
o changeset: 1:7b9836f25f28
| branch: feature/my_feature
|
/
|
o changeset: 0:c22be856358b
команди вбивства:
hg export -o feature.diff 1 2 3
hg update 0
hg branch feature/my_feature
hg import feature.diff
Ось стан мого локального сховища
@ changeset: 6:0e85ae268e35
| branch: feature/my_feature
|
o changeset: 5:1450cb9ec349
| branch: feature/my_feature
|
o changeset: 4:7b9836f25f28
| branch: feature/my_feature
|
| o changeset: 3:cb292fcdbde1
| |
| o changeset: 2:e746dceba503
| |
| o changeset: 1:2d50c7ab6b8f
|/
|
o changeset: 0:c22be856358b
Тепер мені потрібно видалити версії 1 2 і 3 з моєї гілки за замовчуванням. Це можна зробити за допомогою команди strip з розширення mq.
hg strip
видаляє набір змін та всіх його нащадків із сховища.
Увімкніть розширення, додавши у файл конфігурації наступні рядки (.hgrc або Mercurial.ini):
vim ~/.hgrc
і додати:
[extensions]
mq =
А тепер зніміть цей сховище на версії 1.
hg strip 1
і ось ми
@ changeset: 3:0e85ae268e35
| branch: feature/my_feature
|
o changeset: 2:1450cb9ec349
| branch: feature/my_feature
|
o changeset: 1:7b9836f25f28
| branch: feature/my_feature
|
o changeset: 0:c22be856358b
Примітка: набори змін різні, але версії однакові
Для тих, хто схильний використовувати графічний інтерфейс
Tortoise Hg
-> File
-> Settings
і поставте галочку rebase
.Перезапустіть інтерфейс черепахи
Створіть нову гілку, де ви будете рухати зміни. Клацніть на поточну назву відділення -> select Open a new named branch
-> виберіть назву гілки.
public
(наприклад draft
), перейдіть до 5. (Якщо зміни вже були опубліковані, і ви не старший розробник, вам слід поговорити з ким-небудь старшим (отримати козла відпущення), оскільки ви можете накрутити речі на великі терміни , Я не беру на себе жодної відповідальності :)).Перейдіть до View
-> Show Console
(або Ctrl+ L), тоді запишіть у консоль hg phase -f -d 2
- де 2 найнижча версія, ви переходите до нової гілки.
Перейдіть до гілки та перегляду (має бути найвищою версією, якщо ви переміщуєте зміни до нової гілки, створеної на кроці 3.) Right Mouse
->Update
Перейдіть до гілки і перейдіть, коли ви будете переміщувати зміни з Right Mouse
-> Modify History
->Rebase
Клацніть Rebase
і моліться, щоб не було конфліктів, зливайтеся, якщо потрібно.
Натисніть на зміни, на даний момент все зміни повинні бути draft
.
Перейдіть до найвищої версії в галузі, в яку ви рухали зміни Right Mouse
-> Change Phase to
-> Public
.
Сподіваюсь, це заощадить певний час.
public
автоматично (принаймні, для мене вони цього не роблять).