2013-09-04 29 views
7

Có quy trình làm việc thông minh để tạo nhánh pull_request trên một ngã ba được phân tách từ repo ngược dòng để nhánh pull_request luôn khớp hoàn hảo với "master" ngược dòng không?Thay thế hoàn toàn Fork với nguồn gốc (github)

Đó là,

1) Tôi có một ngã ba đã phân kỳ đáng kể từ xa từ xa.

2) Tôi muốn giữ ngã ba của mình (không có ý nghĩa trong việc xóa nó) nhưng, tôi cũng muốn làm sạch các yêu cầu kéo ít khác biệt so với kho lưu trữ ngược dòng ban đầu.

Vì vậy - có cách nào để tạo chi nhánh trong ngã ba của tôi, đó là bản sao hoàn hảo của chủ của một từ xa khác không?

+3

'git kéo thượng nguồn tổng thể: upstream-master'? – Ryan

Trả lời

12

Trước hết, bạn không nên sửa đổi chi nhánh địa phương master của mình, bạn chỉ nên tạo các chi nhánh tính năng. Nếu bạn giữ địa phương của bạn master chưa sửa đổi, sau đó bạn có thể lấy những thay đổi mới nhất từ ​​repo ngược dòng:

git remote add upstream <url-for-upstream-repo> 
git fetch upstream 

Bây giờ bạn chi nhánh từ xa theo dõi upstream/master được đồng bộ hóa với những thay đổi mới nhất từ ​​upstream. Tùy chọn, bạn cũng có thể cập nhật địa phương master của bạn nếu bạn muốn:

git checkout master 
git merge upstream/master 

Bây giờ bạn có thể tạo các ngành chức năng tắt của upstream/master:

git checkout -b feature upstream/master 

Khi bạn muốn đồng bộ hóa các ngành chức năng của bạn với những thay đổi mới nhất từ upstream, bạn có thể sử dụng rebase, miễn là không có ai khác cũng đang làm việc trên nhánh tính năng (nếu không bạn sẽ buộc họ phải đồng bộ hóa lại với lịch sử đã thay đổi). rebase là thực sự lý tưởng cho công việc này, bởi vì bạn thường có thể sử dụng nó để đồng bộ hóa các ngành chức năng thường xuyên như bạn muốn mà không cần tạo một lịch sử lộn xộn, bởi vì họ không tạo hợp nhất cam kết:

git fetch upstream 
git checkout feature 
git rebase upstream/master 

Bạn cũng có thể thay git merge upstream/master của rebasing, nhưng bạn sẽ để lại một cam kết hợp nhất, vì vậy theo thời gian bạn sẽ tạo ra một lịch sử phức tạp hơn bằng cách hợp nhất thay vì rebasing.

Khi bạn đã sẵn sàng gửi yêu cầu kéo, chỉ cần đẩy tới số origin và thực hiện yêu cầu đối với thượng nguồn master.

Những poster ban đầu hỏi:

[I] s Có cách nào để tạo ra một chi nhánh tại ngã ba của tôi mà là một bản sao hoàn hảo của thạc sĩ từ xa khác?

Chừng nào bạn địa phương master chưa tách ra từ upstream/master (mà nó không nên nếu bạn đã và đang làm công việc của bạn trong các ngành chức năng thay vì trực tiếp trong master), sau đó chỉ cần đẩy địa phương của bạn master để bạn origin:

git push origin master 

Ngoài ra, bạn có thể sử dụng một refspec để đẩy bạn từ xa theo dõi chi nhánh upstream/master-origin/master của bạn:

git push origin upstream/master:master 
+0

Đây là đối số tốt nhất mà tôi từng nghe về việc sử dụng các nhánh cho mọi thứ / – jayunit100

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