2012-02-27 27 views
7

Tôi đã tạo một chi nhánh named bằng thủy ngân, cam kết một số thay đổi và bây giờ tôi muốn đẩy nó trở lại kho trung tâm. Tôi đã thực hiện tìm nạp, xác minh tôi không có thay đổi nào để hợp nhất, nhưng khi tôi cố gắng thực hiện thao tác đẩy, tôi nhận được thông báo push creates new remote head nhưng tôi không hiểu tại sao. Tôi là nhà phát triển duy nhất trên chi nhánh này và nó vẫn là địa phương trong kho lưu trữ của tôi.Đầu từ xa mới khi đẩy chi nhánh mới

>hg fetch (pull/update/merge) 
>hg status (shows nothing) 
>hg push --new-branch mybranch 
searching for changes 
new remote heads on branch 'default' 
new remote head c3064f3cf1b7 
abort: push creates new remote head c3064f3cf1b7! 
(did you forget to merge? use push -f to force) 

Bất kỳ ý tưởng nào?

Sửa: xin lỗi vì bất kỳ sự nhầm lẫn, đây là một chi nhánh tên là tạo ra bởi hg branch mybranch

Cập nhật: sử dụng hg heads mang nhiều đầu trên tất cả các chi nhánh khác nhau. Tôi có một cho chi nhánh của tôi, và một dưới mặc định:

changeset: 515:97b9a7802751 
branch:  mybranch 
user:  me <[email protected]> 
date:  Mon Feb 27 13:21:54 2012 -0800 
files:  CryptoRandom.cs 
description: 
fixing error message for size of max 


changeset: 504:c3064f3cf1b7 
user:  me <[email protected]> 
date:  Thu Feb 09 11:41:32 2012 -0800 
files:  CipherKey.cs 
description: 
removing ambiguous characters - CAC-47 

sử dụng hg log -r c3064f3cf1b7 mang lại như sau (đây là người đứng đầu về mặc định):

changeset: 504:c3064f3cf1b7 
user:  me <[email protected]> 
date:  Thu Feb 09 11:41:32 2012 -0800 
files:  CipherKey.cs 
description: 
removing ambiguous characters - CAC-47 
+1

'hg heads' sẽ cho bạn thấy tất cả người đứng đầu. Điều đó phải cho bạn biết 'c3064f3cf1b7' đứng ở đâu với các đầu khác. –

+1

Folow-up to @JoelBFant: 'hg log -r c3064f3cf1b7'. Có vẻ như bạn chưa đặt tên chi nhánh mới, nhưng chi nhánh ẩn danh mặc định –

+0

đã thêm thông tin khác vào chi nhánh. Tôi chắc chắn đó là một chi nhánh được đặt tên ... – earthling

Trả lời

1

Chỉ cần giải quyết một cách kỳ diệu vấn đề này, nhưng vẫn chưa rõ lý do. Nó dường như là một vấn đề với default mặc dù tôi không làm việc trên nhánh đó. Tôi có thể gọi số >hg branch và nhận tên chi nhánh dự kiến.

Tôi đã thay đổi chi nhánh tại địa phương default không được đẩy và không muốn. Tôi ủng hộ sự thay đổi đó và sau đó cam kết. Sau đó, tôi đã thực hiện một chi tiết fetch trên nhánh mặc định và hợp nhất với chi nhánh của tôi. Sau đó, trở lại trên default Tôi sáp nhập với changeset mặc định mà tôi được hỗ trợ từ tôi tin tưởng. Tại một thời điểm nào đó trong quá trình đó, tôi có thêm một cái đầu khác, điều này có thể gây ra nhiều lần hợp nhất.

Có vẻ như tất cả dường như đã được đun sôi xuống trên đầu hiện có theo mặc định, nhưng tôi vẫn không biết tại sao (hoặc lý do chúng tôi muốn) ảnh hưởng đến chi nhánh được đặt tên riêng.

này tất cả dường như quá phức tạp cho những gì tôi mong đợi xảy ra (và những gì mọi người có thể dễ dàng rút ra trong sơ đồ ascii)

Sửa

Dường như vấn đề bắt nguồn trong chi nhánh ban đầu có lẽ. Có vẻ như tôi đã phân nhánh hai lần và [j] là một nhánh ẩn danh theo mặc định.

để loại hình dung những gì có vẻ là đi trên [j] là changeset của tôi, tôi rút lui và [k] là lần đầu tiên tôi cam kết trên mybranch:

[a] -- [b] -- [c] -- [d] -- [e] (default) 
     \    \ /
      [j]-----------\---  (not sure where this branch came from) 
      \   \ 
      [k] -- [l] -- [m] (mybranch. Still separate from default) 
14

Các khó hiểu là lá cờ --new-branch không có tác dụng khi đẩy các chi tiết tính năng (còn được gọi là bất kỳ chi tiết nào khác là chi nhánh). Một chi nhánh mang tính chất trông như thế này:

... [a] --- [b] --- [c] <- the servers head on default 
       \ 
       [x] --- [y] <- my feature branch on default 

Tất cả changesets đang trên default vì vậy bây giờ bạn có hai đầu trên default. Khi bạn đẩy, bạn sẽ tạo hai đầu trên máy chủ - nhưng Mercurial hủy bỏ trước đó với cảnh báo bạn thấy. Nó hủy bỏ kể từ khi có nhiều người đứng đầu trên một máy chủ là khó hiểu: khi bạn hg clone bản sao làm việc của bạn sẽ được cập nhật cho một trong số họ, gần như ngẫu nhiên.

Cờ --new-branch chỉ dành cho named branches. Mercurial thường sẽ hủy bỏ nếu bạn đẩy một nhánh mới có tên đến một kho lưu trữ từ xa. Thêm cờ --new-branch là cách bạn yêu cầu nó tiếp tục.

Thật không may, chúng tôi không có cờ --create-new-feature-branch chuyên dụng. Chúng tôi chỉ có cờ --force để cho Mercurial tiếp tục và tạo hai đầu trong kho lưu trữ từ xa. Nhược điểm của --force là nó ghi đè lên tất cả các kiểm tra an toàn: bạn có thể đẩy ba hoặc nhiều đầu mới với cờ đó và thậm chí bạn có thể đẩy vào một kho lưu trữ không liên quan. Vì vậy, bạn nên sử dụng hg outgoing để kiểm tra kỹ những gì bạn sẽ đẩy.

Tôi đã viết ở trên rằng nhiều người đứng đầu trên máy chủ là khó hiểu vì một bản sao mới sẽ được cập nhật lên một đầu ngẫu nhiên. Để tránh nhầm lẫn, bạn có thể đặt tên chi tiết cho các đối tượng địa lý bằng cách đánh dấu trang chúng. Bạn sẽ vẫn được cập nhật lên một đầu ngẫu nhiên, nhưng hg bookmarks sẽ hiển thị cho bạn các chi nhánh tính năng khả dụng và sau đó bạn có thể cập nhật thành một nhánh phù hợp. Vì vậy, nếu bạn đang sử dụng quy trình làm việc như vậy, hãy tiếp tục với hg push -f.

+0

Tôi đã cập nhật bài đăng của mình để làm rõ rằng tôi đang sử dụng một chi nhánh được đặt tên. – earthling

+0

Tôi nhập 'hg branch' và tôi nhận tên chi nhánh:' php7' thay cho 'default'. Nhưng tôi vẫn không thể thúc đẩy bằng '--new-branch'. Điều đó có nghĩa là tôi không ở trong một chi nhánh được đặt tên? Sao có thể như thế được? Tôi tìm thấy cách duy nhất để đẩy là 'hg push -f' nhưng điều đó không cảm thấy phù hợp với nhánh mới của tôi có tên 'php7' –

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