2013-01-09 37 views
10

Hãy tưởng tượng một tình huống mà bạn có hai nhánh của cùng một dự án, với một phần của nhánh đầu tiên được tái cấu trúc đáng kể so với một nhánh khác. Nhưng trong một thời gian bạn cần phải giữ cho cả hai ngành chức năng, vì vậy bạn đang sửa lỗi và bổ sung tính năng quan trọng cho cả hai người trong số họ, đôi khi một cách không đối xứng. Và tại một số điểm có một thời điểm khi bạn phải hợp nhất chi nhánh được cấu trúc lại vào bản gốc. Kỹ thuật tốt nhất để sử dụng trong tình huống như thế này là gì? Vẫn có thể giữ lịch sử sạch sẽ?Git: Làm cách nào để hợp nhất hai nhánh chức năng và hoàn toàn khác nhau?

Nhưng quan trọng hơn, chiến lược ban đầu của tôi là gì?

Trả lời

8

Kể từ khi nhiệm vụ là chỉ cần sử dụng một chi nhánh thay vì master, bạn chỉ có thể loại bỏ master chi nhánh hoàn toàn hoặc đổi tên nó để giả - legacy, sau đó đi một chi nhánh khác và đổi tên nó để master. Đó là nó. Dưới đây là các lệnh thực tế mà bạn có thể cần thực thi để đạt được mục tiêu cục bộ và trên GitHub:

git branch -m master legacy    # rename local master to legacy 
git checkout legacy 
git branch -m another_branch master  # another_branch will be our new master 

Hiện tại chúng tôi đã hoàn thành. Tuy nhiên, bạn không thể chỉ cần xóa chi tiết master trên GitHub. Bạn cần phải thực hiện một nhánh khác làm mặc định trước tiên. Điều này có thể được thực hiện trong kho Settings > Default Branch. Khi bạn làm điều này, bạn có thể tiến hành:

git push origin :master     # remove master on GitHub 
git push origin master     # push out our new master branch 
git push origin legacy     # push our legacy branch too 

Sau đó, quay trở lại Settings > Default Branch và chuyển đổi chi nhánh mặc định trở lại master. Ngoài ra, bạn có thể xóa tất cả các nhánh bổ sung mà bạn có thể đã tạo trong quá trình di chuyển.

Hoặc, nếu bạn muốn lưu tất cả các hành động của mình trong lịch sử, hãy kiểm tra câu trả lời đúng here.

+1

Và làm thế nào để bạn loại bỏ 'di sản'? –

+1

Vấn đề là giữ di sản, chỉ trong trường hợp. Nếu bạn không cần di sản, bạn chỉ cần xóa nó như bất kỳ nhánh nào khác: http://stackoverflow.com/questions/2003505/how-do-i-delete-a-git-branch-both-locally-and- in-github – jayarjo

+0

Tuyệt vời, cảm ơn. – Dogweather

2

Vì bạn có 2 chi nhánh, một được tái cấu trúc đáng kể từ bên kia và bạn đang duy trì cả hai ... tôi sẽ nói Git sẽ không giúp bạn một cách kỳ diệu. Để git trợ giúp, các bản vá/thay đổi bạn áp dụng cho nhánh 1 cần phải giống với nhánh 2 (nhưng không giống chính xác).

Kể từ khi được cấu trúc lại, mã có thể không giống nhau, trừ khi mã mới được mô đun hóa giống nhau trên cả hai nhánh.

Bạn nên làm gì ngay từ đầu?

  • thêm một số bài kiểm tra đơn vị và/hoặc mã kiểm tra tích hợp đến chi nhánh ban đầu
  • chạy thử nghiệm tích hợp trên cùng một chi nhánh thứ 2
  • cho những thay đổi mới thêm các xét nghiệm
  • sau đó bạn có thể xác minh những thay đổi làm việc cho cả chi nhánh

cập nhật: để quản lý những thay đổi để cả hai chi nhánh, bạn có thể chỉ cần một quá trình, chẳng hạn như: - làm việc chủ yếu vào ngành r efactored - hợp nhất mọi "câu chuyện" hoặc mục công việc thành chi nhánh thừa kế khi chúng được thực hiện

Bước thứ hai là những gì tôi nghĩ sẽ rất nhiều nếu mã quá khác nhau giữa các nhánh. Nếu bạn phải duy trì cả hai nhánh, hãy cố gắng đóng gói mã mới trong thư viện có thể được sử dụng trong cả hai nhánh. Điều đó sẽ làm cho việc sáp nhập từ một nhánh này sang một trình dọn dẹp khác.

+2

Tôi đã kiểm tra đơn vị. Đó không phải là mối quan tâm của tôi.Chỉ muốn biết nếu có một chiến lược tốt hơn để có được một lịch sử git sạch hơn. – jayarjo

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