Tôi có một số thay đổi mà tôi đã cam kết với kho lưu trữ cục bộ của mình, nhưng chưa được đẩy. Vì tính năng mất nhiều thời gian hơn dự kiến, tôi muốn hoán đổi những thay đổi này vào chi nhánh được đặt tên trước khi tôi đẩy. Tôi có thể làm cái này như thế nào?Thay đổi di chuyển bằng Mercurial đến chi nhánh mới
Trả lời
Theo đề nghị của Mark, các MqExtension là một giải pháp cho bạn vấn đề. IMHO một quy trình đơn giản hơn là sử dụng rebase extension. Giả sử bạn có một lịch sử như thế này:
@ 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
Điều này có nghĩa, sửa đổi 0
là cơ sở mà trên đó bạn bắt đầu làm việc trên tính năng của bạn. Bây giờ bạn muốn có bản sửa đổi 1-2
trên một chi nhánh được đặt tên, giả sử my-feature
. Update để sửa đổi 0
và tạo mà chi nhánh:
$ hg up 0
$ hg branch my-feature
$ hg ci -m "start new branch my-feature"
Lịch sử bây giờ trông như thế này:
@ 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
Sử dụng lệnh rebase
để di chuyển các phiên bản 1-2
lên phiên bản 3
:
$ hg rebase -s 1 -d 3
này kết quả trong biểu đồ sau:
@ 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
Đó là .. như đã đề cập trong phần bình luận cho câu trả lời của Mark, di chuyển xung quanh đã được thay đổi thường là một ý tưởng tồi, trừ khi bạn làm việc trong một nhóm nhỏ nơi bạn có thể giao tiếp và thực thi thao tác lịch sử của bạn.
IMHO hạn chế của giải pháp này là nó giới thiệu một "bắt đầu chi nhánh mới tính năng của tôi" giả mạo cam kết (tức là một trong đó không thay đổi bất kỳ tập tin). – sschuberth
@sschuberth: Tôi nghĩ rõ ràng là một điều tốt ở đây. Nếu thay đổi thêm là một vấn đề cho bạn, hãy kết hợp nó với thành công (ví dụ bằng cách sử dụng lệnh 'fold' của phần mở rộng [histedit] (http://mercurial.selenic.com/wiki/HisteditExtension)). –
Làm thế nào để bạn in nhật ký bằng cây ASCII? –
Bạn có thể sử dụng MqExtension. Hãy nói rằng các changesets để di chuyển là các phiên bản 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
Tôi muốn nhập 63:64 và 66:68. Tôi nhận được bản sửa đổi 65 không phải là phụ huynh của 64 – Casebash
Bạn muốn làm gì với 65? Mq chỉ có thể chuyển đổi các thay đổi liên tiếp từ đầu. Nó biến những thay đổi không thay đổi thường thành các bản vá có thể thay đổi có thể được chỉnh sửa. Điều này thay đổi các băm (ảnh hưởng đến tất cả trẻ em), vì vậy bạn không thể bỏ qua. –
Tôi có một số thay đổi (bao gồm 65) mà tôi đã thực hiện trên nhánh chính và đẩy – Casebash
Tôi thích giải pháp vá mô tả here Mark Tolonen
Những gì tôi có:
hg log -G
#default branch
@ changeset: 3:cb292fcdbde1
|
o changeset: 2:e746dceba503
|
o changeset: 1:2d50c7ab6b8f
|
o changeset: 0:c22be856358b
Những gì tôi muốn:
@ 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
mercurials lệnh:
hg export -o feature.diff 1 2 3
hg update 0
hg branch feature/my_feature
hg import feature.diff
Đây là tình trạng của kho địa phương của tôi
@ 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
Bây giờ tôi cần phải xóa các phiên bản 1 2 và 3 từ chi nhánh mặc định của tôi. Bạn có thể làm điều này với lệnh dải từ phần mở rộng của mq. hg strip
xóa changeset và tất cả con cháu của nó khỏi kho lưu trữ.
Bật tiện ích mở rộng bằng cách thêm các dòng sau vào tệp cấu hình của bạn (.hgrc hoặc Mercurial.ini):
vim ~/.hgrc
và thêm:
[extensions]
mq =
Và bây giờ dải kho này trên phiên bản 1.
hg strip 1
và ở đây chúng tôi đang
@ 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
lưu ý: changesets được khác nhau nhưng các bản sửa đổi giống nhau
Đối với những người có khuynh hướng sử dụng GUI
- Đến
Tortoise Hg
->File
->Settings
sau đó đánh dấu vàorebase
.
Restart rùa UI
Tạo chi nhánh mới, nơi bạn sẽ được di chuyển thay đổi. Nhấp vào tên chi nhánh hiện tại -> chọn
Open a new named branch
-> chọn tên chi nhánh.
- Nếu thay đổi mà bạn muốn di chuyển đã không được thực hiện
public
(ví dụdraft
) đi đến 5. (Nếu thay đổi đã được xuất bản và bạn không phải là một dev cao cấp, bạn nên nói chuyện với một người cao cấp (có được một vật tế thần) như bạn có thể vít những thứ lên thời gian lớn, tôi không chịu trách nhiệm :)).
Đến View
->Show Console
(hoặc Ctrl +L) sau đó viết trong giao diện điều khiển hg phase -f -d 2
- nơi 2 là phiên bản thấp nhất, bạn sẽ được chuyển sang chi nhánh mới.
Đến chi nhánh và sửa đổi (nên được sửa đổi trên cùng nếu bạn đang di chuyển thay đổi chi nhánh mới tạo ở bước 3.)
Right Mouse
->Update
Đến chi nhánh và revsion bạn sẽ được di chuyển thay đổi từ
Right Mouse
->Modify History
->Rebase
Nhấp vào
Rebase
và cầu nguyện không có xung đột, hợp nhất nếu bạn phải.Thay đổi đẩy, tại thời điểm này tất cả các bản chỉnh sửa vẫn phải là
draft
.Chuyển đến bản sửa đổi ở trên cùng trong nhánh bạn đang di chuyển thay đổi sang
Right Mouse
->Change Phase to
->Public
.
Hy vọng điều này giúp bạn tiết kiệm một chút thời gian.
Công việc tuyệt vời! sẽ thử điều này, chỉ là một câu hỏi - tại sao thay đổi giai đoạn thành công khai ở cuối? "Bất kỳ changesets nhìn thấy trong một kho lưu trữ từ xa là công khai" vì vậy khi bạn đẩy nó sẽ không được thiết lập để công khai nào? –
@JoshLeeDucks Khi đẩy chúng không thay đổi thành 'công khai' một cách tự động nữa (ít nhất là đối với tôi thì không). –
- 1. Git: Cách di chuyển thay đổi kể từ lần commit cuối cùng đến chi nhánh mới
- 2. mercurial đặt chi nhánh làm chi nhánh mặc định mới
- 3. Tại sao các Mercurial backouts trong một chi nhánh ảnh hưởng đến các chi nhánh khác?
- 4. git: di chuyển chi nhánh đầu
- 5. thay đổi stit git áp dụng cho chi nhánh mới?
- 6. Di chuyển phân cấp chi nhánh SVN phức tạp sang Mercurial
- 7. Thay đổi điểm chi nhánh
- 8. cách cam kết thay đổi chi nhánh mới
- 9. Chi nhánh nhỏ, tạm thời trong Mercurial
- 10. Cố gắng hợp nhất trở lại từ chi nhánh đến chi nhánh chính và đóng trong Mercurial
- 11. Làm cách nào để di chuyển các thay đổi từ một chi nhánh sang một nhánh khác?
- 12. Di chuyển các thay đổi cục bộ vào một chi nhánh
- 13. Chèn chi nhánh mới giữa hai chi nhánh hiện tại
- 14. Đổi tên cam kết thành chi nhánh trong Mercurial
- 15. Chi nhánh cho mọi thay đổi nhỏ?
- 16. Mercurial: Tạo một chi nhánh mà không phải thực hiện thay đổi đầu tiên
- 17. Di chuyển các cam kết từ một chi nhánh này sang một chi nhánh khác
- 18. Perforce - di chuyển một Changelist xếp chồng từ chính đến chi nhánh?
- 19. Mercurial - đóng nhánh mặc định và thay thế bằng một nhánh có tên là mặc định mới
- 20. Di chuyển các sửa đổi được thực hiện trong chi nhánh phát triển thành chi nhánh tính năng git-flow mới?
- 21. Hoàn tác tạo chi nhánh trong Mercurial
- 22. Di chuyển bản sao làm việc SVN sau đổi tên chi nhánh
- 23. TFS: gửi các thay đổi được thực hiện cục bộ trong một chi nhánh đến một chi nhánh khác
- 24. Chuyển TFVC đang chờ xử lý các thay đổi cho chi nhánh mới bằng cách sử dụng VS2010?
- 25. Moving thay đổi không bị giam vào một chi nhánh mới
- 26. Thay đổi chi nhánh phụ huynh
- 27. TFS đặt giá trị di chuyển từ một chi nhánh này sang một chi nhánh khác
- 28. Git: không thể chuyển sang chi nhánh mới từ xa
- 29. sáp nhập các sửa đổi đã chọn từ một chi nhánh này sang chi nhánh khác trong Mercurial
- 30. GitHub Kéo Yêu cầu đến Chi nhánh Upstream mới
bản sao có thể có của [Cách di chuyển một số thay đổi cho chi nhánh mới trong mercurial] (http://stackoverflow.com/questions/2219756/how-to-move-some-changeset-to-a-new-branch- in-mercurial) –