2010-11-09 36 views
5

Tôi có hai nhánh: master và testing. Cả hai đều phát triển riêng và bây giờ rất khác. Bây giờ tôi đã sẵn sàng để làm chi nhánh thử nghiệm nhánh chính của tôi.Cách thay thế nhánh chính bằng chi nhánh thí nghiệm

Nếu tôi cố gắng

git checkout master 
git merge experiment 

tôi nhận được tấn và tấn lỗi.

Cách dễ nhất để lấy nhánh thử nghiệm để trở thành bậc thầy mà không mất tất cả lịch sử của nhánh thử nghiệm là gì.

tôi đã tạo một bản sao lưu của chi nhánh tổng thể như phát hành 1.0 như thế này

git checkout master 
git checkout -b release_1 
+1

Bạn gặp phải loại lỗi nào? Và bạn có muốn * hợp nhất * các thay đổi trong bản gốc hay chỉ thay thế bản gốc bằng nhánh thử nghiệm? – poke

+0

Tôi đoán các lỗi thực sự là "xung đột" –

+0

lựa chọn từ khó. Tôi nên nói những xung đột. Nhưng có rất nhiều và tôi không thực sự muốn giải quyết chúng. –

Trả lời

21

Giả sử đây là những tin chi nhánh (ví dụ: không ai khác đang làm việc với họ), bạn chỉ có thể đặt master thành experiment như sau:

git checkout master 
git reset --hard experiment 

Nếu đây là các nhánh công khai, có thể bạn sẽ muốn hợp nhất và giải quyết xung đột, dưới dạng Jefromi explains.

+0

Điều này không chỉ "sao chép" nội dung từ nhánh thử nghiệm sang nhánh hiện tại? Bằng cách đó bạn sẽ mất lịch sử của chi nhánh .. – poke

+0

@poke: thiết lập lại không sao chép bất cứ điều gì. Điều này chỉ đặt 'master' chính xác là' thử nghiệm' là. –

+0

@Mauricio: Đúng, nhưng nó ném đi bản gốc (và với tất cả các cam kết mới không nằm trong nhánh thử nghiệm) và làm cho chính một "bản sao" của nhánh thử nghiệm, chỉ vào cùng một HEAD. – poke

2

Bạn có thể đổi tên chi nhánh của bạn (từ thí nghiệm): git branch -M master

12

Có một vài khả năng ở đây, tùy thuộc vào chính xác ý bạn là "thay thế". Bạn gần như chắc chắn đã tiếp cận đúng để bắt đầu - sáp nhập nói chung là con đường để đi. "Các lỗi" mà bạn thấy là các xung đột hợp nhất, có lẽ là. Nếu bạn biết chắc chắn rằng, bất cứ khi nào có một cuộc xung đột, bạn muốn sử dụng phiên bản từ chi nhánh thử nghiệm của bạn, bạn có thể làm:

# resolve conflicts by taking the version from experimental 
# non-conflicting content is merged normally 
git checkout master 
git merge -Xtheirs experimental 

Nếu bạn muốn sử dụng các phiên bản trong thực nghiệm cho mọi thứ, không chỉ nơi có xung đột, có rất nhiều cách (không thực sự là một chiến lược hợp nhất cho việc này). Cách đơn giản nhất:

# do the merge the other way around 
git checkout experimental 
git merge -s ours master 
git checkout master 
git merge experimental 

# do the merge the right way 
git checkout master 
git merge --no-commit experimental # merge, but stop before committing 
git checkout experimental .   # check out content, but don't switch branch 
git commit       # commit the merge 

Những cách khác đã gợi ý (reset --hard, branch -M) sẽ làm việc, loại, nhưng vì họ không tạo ra một hợp nhất cam kết, bạn di chuyển chi nhánh tổng thể một cách phi nhanh về phía trước, có khả năng gây đau đầu cho những người khác cần rút khỏi repo này. Nói chung, tôi muốn nói đó là câu trả lời đúng chỉ khi những nhánh này chưa được công bố.

+0

Tôi nghĩ có một sự hiểu lầm ở đây. OP không muốn hợp nhất, anh ta muốn thay thế chi nhánh. –

+1

@Mauricio: Không, OP muốn thay thế * nội dung * của chi nhánh, tránh giải quyết xung đột. Bạn có thể có cả hai cách - và nếu bạn hợp nhất, điều đó có nghĩa là những người khác sẽ có thể quét sạch bản cập nhật. (Điều này, với tôi, là một trường hợp rõ ràng là cần phải làm X, và yêu cầu làm thế nào để làm Y để hoàn thành nó, khi bạn thực sự có thể làm Y ', điều đó sẽ làm cho mọi người hạnh phúc hơn.) – Cascabel

+0

@ Jefromi: thực sự, có vẻ như bạn cho rằng đó là nhánh * công khai *, trong khi tôi cho rằng đó là nhánh * riêng *. –

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