Yêu cầu kéo của tôi đã được hợp nhất, phải làm gì tiếp theo?


112

Gần đây tôi đã tham gia vào một dự án từ GitHub. Tôi đã làm như sau:

Đã chia nhánh kho lưu trữ gốc, sao chép nó vào máy cục bộ của tôi, tạo nhánh để sửa lỗi hiện có, sửa lỗi nằm trong nhánh đó, đẩy nhánh đó vào kho của tôi, gửi yêu cầu kéo tới tác giả của kho để hợp nhất nhánh sửa của tôi thành chi nhánh chính của nó.

Đây là lần đầu tiên tôi cam kết trên mã của người khác nên tôi không biết phải làm gì. Bây giờ yêu cầu kéo của tôi đã được tác giả hợp nhất với repo / dự án gốc.

Tôi nên làm gì tiếp theo? Tôi có nên xóa chi nhánh không? Tôi có nên hợp nhất chi nhánh không? Còn gì nữa không?


Thông tin bổ sung:

Dự án ban đầu có một nhánh duy nhất.

Tôi cũng có một bộ ngược dòng để nhận các bản cập nhật mới nhất tạo thành repo gốc. (Tôi đã làm như thế này) :

git remote add upstream https://path/to/original/repo.git

Và tôi nhận được các bản cập nhật như thế này:

git fetch upstream

12
Ghehe, bạn không phải là chỉ có một đấu tranh: Youtube Video :)
Anne

Câu trả lời:


65

Việc cần làm tiếp theo là: tiếp tục đóng góp các tính năng mới hoặc sửa các lỗi khác trong các nhánh chuyên dụng của riêng họ (chỉ được đẩy đến ngã ba của bạn).

Có nghĩa là ngã ba của bạn vẫn ở, nhưng các nhánh bên trong ngã ba của bạn có thể đến và đi.

Bạn cũng có thể xóa fork nếu bạn không định đóng góp thêm, nhưng nó sẽ xóa mục nhập tương ứng trong 'Kho lưu trữ bạn đóng góp vào' .

Nó dễ dàng hơn để:

  • xóa fixchi nhánh của bạn (trên thực tế, nó hiện đã bị xóa cho bạn ) trên fork của bạn (và trong repo nhân bản cục bộ của bạn: xem " Xóa chi nhánh Git cả cục bộ và từ xa ")
  • git pull upstream master(nếu masterlà nhánh mà bản sửa lỗi của bạn đã được tích hợp: hợp nhất sẽ là một nhánh tua đi nhanh): không cần rebase tại thời điểm này.
  • tạo lại một nhánh sửa chữa trên đầu trang cục bộ đã cập nhật của bạn master(hiện có mới nhất từ upstream master).

Tuy nhiên, đừng bao giờ quên một bước trước khi gửi bất kỳ yêu cầu kéo nào trong tương lai :

đầu tiên rebase chi nhánh hiện tại của bạn ( fix) từ chi nhánh đích ngược dòng

( upstreamlà bản repo ban đầu mà bạn đã fork: xem " Sự khác biệt giữa nguồn gốc và phần ngược dòng trong github là gì ")

Trước khi gửi bất kỳ thứ gì trở lại repo ban đầu ("ngược dòng"), bạn cần đảm bảo công việc của mình dựa trên những thông tin mới nhất từ repo gốc đã nói (hoặc yêu cầu kéo sẽ không dẫn đến hợp nhất tua đi nhanh khi được áp dụng trở lại upstreamrepo).
Ví dụ: xem " Quy trình làm việc để quản lý các yêu cầu kéo trên các kho lưu trữ được chia sẻ trong github ".

Nói cách khác, upstreamcó thể phát triển (có các cam kết mới được đẩy lên) trong khi bạn đang bận sửa chữa mọi thứ. Bạn cần phát lại các bản sửa lỗi của mình trên đầu tác phẩm mới nhất đó từ ngược dòng để đảm bảo các cam kết của bạn vẫn tương thích với bản mới nhất của upstream.


Các OP Santosh Kumar hỏi trong các ý kiến :

Tôi đã kéo và hợp nhất từ upstreamthành chủ, bây giờ thì sao?

Nếu bạn chưa thực hiện bất kỳ bản sửa lỗi mới nào kể từ lần yêu cầu kéo gần đây của mình, hãy xem ở trên (xóa và tạo lại một nhánh mới fixtrên đầu bản cập nhật của bạn master).

Nếu bạn đã thực hiện thêm bất kỳ công việc nào kể từ yêu cầu kéo của bạn, tôi sẽ không hợp nhất từ upstreamnếu tôi muốn tạo một yêu cầu kéo mới : Tôi sẽ kéo và rebase :

git pull --rebase upstream master

Bằng cách đó, tất cả công việc cục bộ mới của tôi được phát lại trên đầu các upstream mastercam kết gần đây nhất (được tìm nạp trong kho lưu trữ cục bộ của tôi), giả sử đó masterlà nhánh mục tiêu sẽ tích hợp yêu cầu kéo trong tương lai của tôi.

Sau đó, tôi có thể đẩy công việc địa phương của mình lên ' origin', đó là ngã ba của tôi trên GitHub của upstream.
Và từ fork của tôi trên GitHub, tôi có thể thực hiện một yêu cầu kéo một cách an toàn, biết rằng nó sẽ chỉ thêm các cam kết mới upstreammà không cần bất kỳ giải pháp hợp nhất nào: việc hợp nhất các cam kết mới đó trong upstreamrepo sẽ có nghĩa là hợp nhất chuyển tiếp nhanh đơn giản.


A git pull --rebasemà không chỉ định nhánh mà bạn muốn căn cứ lại fixnhánh (hiện đã kiểm tra) của bạn sẽ không hoạt động:

Điều đó ( git pull --rebase) nói:

You asked to pull from the remote '`upstream`', but did not specify a branch. 

Cuối cùng thì tôi có nên nối master không? Và điều này sẽ làm gì ?, nó có xóa fixchi nhánh của tôi không?

Có, bạn có thể chỉ định nhánh sẽ là mục tiêu của yêu cầu kéo, ví dụ: ' master'.
Điều đó sẽ không xóa fixchi nhánh của bạn , nhưng sẽ phát lại nó trên đầu trang ngược dòng masterđược tìm nạp trong repo của bạn.


Bạn có thể giải thích rebase từ phần thượng nguồn không?
Santosh Kumar

@SantoshKumar bạn cần phải rebase địa phương cam kết của bạn trên đầu trang của repo gốc (ở đây tham chiếu như là thượng nguồn) trước khi đẩy đến bàn ăn của bạn và làm theo yêu cầu kéo của bạn: xem stackoverflow.com/questions/9257533/...
VonC

Ya, tôi biết tôi đang hỏi một câu hỏi cơ bản . Tôi đã kéo và hợp nhất từ ​​thượng nguồn để làm chủ, bây giờ thì sao?
Santosh Kumar

@SantoshKumar đó là một câu hỏi hay. Tôi đã chỉnh sửa câu trả lời để giải quyết nó. Nhìn cho "The OP Santosh Kumar hỏi trong các ý kiến: ..."
VonC

Điều đó nói rằng: Cuối cùng thì You asked to pull from the remote 'upstream', but did not specify a branch.tôi có nên nối thêm masterkhông? Và điều này sẽ làm gì ?, nó có xóa nhánh sửa chữa của tôi không?
Santosh Kumar

18

Đầu tiên, xin chúc mừng bạn đã đóng góp đầu tiên cho một dự án trên Github.

Quy trình làm việc thông thường của Github là tạo một nhánh mới cho mọi vấn đề bạn giải quyết. Bằng cách đó, người duy trì kho lưu trữ dòng chính có thể quyết định hợp nhất một trong các giải pháp của bạn và từ chối giải pháp nào. Sau khi một nhánh được hợp nhất ngược dòng, nhánh sẽ không cần thiết nữa và thường có thể bị xóa.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.