2011-02-02 27 views
49

Tôi có một repo Hg với 3 chi nhánh trong đó, nhưng hai trong số đó là không hoạt động (vì tôi đã sáp nhập chúng vào nhánh mặc định của tôi). đầu hg hiển thị 3 đầu, một cho mỗi nhánh, mặc dù các chi nhánh h2 hg hiển thị 2 trong số các nhánh đó là 'không hoạt động'.Làm thế nào để chỉ đẩy vào một nhánh trong Hg?

Khi tôi cố gắng đẩy nhánh mặc định của mình (sử dụng hg push --branch mặc định http: // ...) sang một repo khác, hợp nhất bị hủy với thông báo "hủy bỏ: đẩy tạo nhánh mới từ xa: ! "

Từ trang người dùng đẩy Hg, "Theo mặc định, việc đẩy sẽ không cho phép tạo đầu mới tại điểm đến vì nhiều đầu sẽ không rõ đầu nào cần sử dụng. Trong trường hợp này, bạn nên kéo và hợp nhất trước khi đẩy. "

Tôi đã làm điều đó, nhưng tôi vẫn không thể đẩy - mặc định mặc dù không bị hủy bỏ.

Mọi trợ giúp đều được đánh giá cao. Cảm ơn!

Trả lời

53

Nếu các thay đổi trên default có các thay đổi tổ tiên trên các nhánh khác, bạn cũng phải đẩy các thay đổi đó. Nó không thể cho một changeset tồn tại trong một repo mà không có tất cả các thay đổi của nó cũng tồn tại.

Vì vậy, hãy thử:

hg push --branch default --new-branch 

mà nói "vâng, tôi biết điều này đẩy sẽ gửi qua một tên chi nhánh rằng repo từ xa chưa từng thấy trước đây" (nó cũng đòi hỏi Mercurial 1.6 hoặc mới hơn IIRC)>

Ngoài ra, bạn có thể mất những người đứng đầu hoạt động và làm cho họ đóng đứng đầu với:

hg update thebranch 
hg commit --close-branch -m 'closing' 

Bởi vì "tên chi nhánh là mãi mãi" nhiều folks chọn giữ chúng trong thời gian dài sống các khái niệm như "ổn định" và "thử nghiệm" và sử dụng dấu trang, nhánh ẩn danh hoặc bản sao cho các tính năng, bản phát hành và các thứ tạm thời khác. Xem phần này cho một số guide trên các tùy chọn khác đó.

+10

Câu trả lời của bạn là chính xác, nhưng điều đó không có nghĩa là tôi phải thích nó;) – simon

+2

Đủ công bằng. Tôi tránh các chi nhánh được đặt tên hoàn toàn. Tôi là một nhân bản như anh chàng chi nhánh. –

+7

Chắc chắn là vậy. Tôi sử dụng git nhiều hơn tôi sử dụng Merucrial, và tôi cũng có một .gitconfig yêu cầu chỉnh sửa bằng tay vì git không thể cập nhật nó. Mercurial không muốn hỏng cấu hình của bạn và git là nếu bạn yêu cầu nó. Cả hai đều là lựa chọn hợp lệ, miễn là chúng được ghi lại. Tôi dunno có bài viết bạn liên kết đến đó, nhưng anh chàng đó có thể sử dụng một trình soạn thảo. –

0

Bạn có thể FORCE nó!

Sau đây là cách:

1. Pull from your repository 
2. hg push --rev nnn -f (replace nnn with your Rev # of your working branch) 
3. do NOT force before PULLing. if you do things will get out sync and you are screwed 

Nếu bạn đang sử dụng một cái gì đó giống như RhodeCode sau đó kiểm tra xem nó ra sau khi buộc nó và bạn sẽ thấy rằng chi nhánh mới nhất của bạn là ở đó.

Tuy nhiên tôi nghĩ rằng sau này Mercurial sẽ yêu cầu bạn đẩy nhánh khác một lần nữa, ngay cả khi bạn đóng nó, Mercurial sẽ cố tạo nhánh đó trên máy chủ.

Tôi cũng là người dùng Git và chạy vào cùng một tình huống vì khách hàng đang sử dụng Mercurial nhưng tôi muốn sử dụng kiểu công việc Git.

Tôi nghĩ điều đó có thể thực hiện được nhưng tôi chưa tìm ra 100%.

23

Để đẩy một chi nhánh duy nhất bạn chỉ cần sử dụng -b

hg push -b myBranch 

như đối với các vấn đề cụ thể, bạn có thể muốn xem xét chi nhánh đóng cửa.Tôi biết SourceTree cung cấp, nhưng tôi không chắc chắn về các chi tiết cụ thể

+0

Cảm ơn, đây là câu trả lời tôi đang tìm kiếm. Đơn giản chỉ cần làm thế nào để đẩy một chi nhánh duy nhất. –

+0

Điều này không hiệu quả đối với tôi. Vẫn cần phải thêm '--new-branch' – Mahm00d

+1

Đó là vì nhánh bạn đang đẩy chưa được đẩy tới máy chủ. Nếu bạn đang đẩy nhánh hiện tại, câu trả lời này sẽ hoạt động. – dguay

Các vấn đề liên quan