Sáp nhập giữa các dĩa trong GitHub


259

Tôi đã rẽ nhánh một kho lưu trữ GitHub. Sau đó, tôi đã đẩy một số thay đổi đến ngã ba của tôi. Sau đó, kho lưu trữ ban đầu đã hợp nhất các thay đổi của tôi và một số khác. Bây giờ, tôi muốn hợp nhất những thay đổi mà tôi đang thiếu. Tôi đã thử kéo đơn giản theo sau bằng cách đẩy, nhưng điều này mang lại cam kết của tôi nhân đôi. Cách tốt nhất để làm điều đó là gì?

Câu trả lời:


352

Bạn có thể có một "điều khiển từ xa" cho mỗi kho lưu trữ. Bạn cần phải kéo từ điều khiển này và đẩy sang điều khiển khác.

Nếu ban đầu bạn được nhân bản từ ngã ba của bạn, điều khiển từ xa đó sẽ được gọi là "nguồn gốc". Nếu bạn chưa thêm nó, bạn sẽ cần thêm kho lưu trữ của người đầu tiên dưới dạng một điều khiển từ xa khác:

git remote add firstrepo git://github.com/first/repo.git

Sau khi tất cả đã được thiết lập, bạn thực sự sẽ có thể

git pull firstrepo master
git push origin

Hãy nhớ rằng, git pullkhông có gì hơn một macro làm git fetchgit merge, theo thứ tự đó. Bạn chỉ cần tìm nạp danh sách các xác nhận từ kho lưu trữ của người đầu tiên và sau đó hợp nhất chi nhánh của họ vào cây của bạn. Sáp nhập nên làm điều đúng với cam kết của bạn trên cả hai chi nhánh.

GitHub, trong tất cả sự tuyệt vời vĩnh viễn của nó, tất nhiên cung cấp cho bạn một lối tắt. Có nút "chuyển tiếp nhanh" trên ngã ba của kho lưu trữ mà bạn có thể sử dụng để bắt ngã ba của mình nếu bạn hoàn toàn hợp nhất vào phía bên kia.


1
Có cách nào để làm điều này hoàn toàn với các hoạt động từ xa? Nếu tôi hiểu chính xác, với phương pháp này, bạn sẽ tải xuống tất cả các thay đổi vào kho lưu trữ cục bộ và sau đó tải (đẩy) tất cả chúng trở lại ngã ba trên github. Tôi chỉ muốn bằng cách nào đó kéo tất cả các thay đổi trực tiếp vào ngã ba trên github.
Ken Liu

1
Không. Git không hỗ trợ điều đó. May mắn thay, Github có một nút hợp nhất trong giao diện web, mặc dù.
cweiske

13
@cweiske - Nút Hợp nhất này ở đâu? Tôi đã xem tất cả thông qua các trang quản trị và trang chính, nhưng không thể tìm thấy nó :(.
Adam

2
@Adam, nó trên trang Pull Request. Vì vậy, người giả mạo sẽ mở Yêu cầu kéo để hợp nhất một trong các chi nhánh của họ với một trong các chi nhánh của bạn. Ở đó bạn có thể nhấp vào nút hợp nhất.
Rob Barreca

2
Nút Chuyển tiếp nhanh dường như không còn khả dụng nữa. Để biết thông tin, tôi đã sử dụng một URL git khác trong lệnh của mình:git remote add snaury git@github.com:snaury/script-runner
olibre

72

Vì vậy, câu trả lời được chấp nhận ở trên không làm việc cho tôi hoàn hảo. Cụ thể, nó dường như mất liên kết đến tác giả github ban đầu khi nó hoạt động, và sau đó dường như không còn hoạt động nữa sau đó. Tôi nghĩ vấn đề là câu trả lời bỏ qua / giữa tên từ xa và chi nhánh. Vì vậy, nó sẽ lấy một nhánh được gọi là master từ xa, nhưng sau đó không thể làm gì với nó. Không thực sự chắc chắn tại sao.

Đây là cách github đề xuất từ ​​trang web của họ .

Khi bạn đã nhân bản repo ngã ba của mình, bạn cần thêm một điều khiển từ xa vào bản gốc như câu trả lời trước đó đã nói. Họ thích gọi nó ngược dòng, nhưng nó không thành vấn đề.

git remote add upstream git://github.com/octocat/Spoon-Knife.git

Sau đó, bạn lấy

git fetch upstream

và bạn sẽ thấy các phiên bản có sẵn để hợp nhất

From git://github.com/octocat/Spoon-Knife.git
 * [new branch]      gh-pages   -> upstream/gh-pages
 * [new branch]      master     -> upstream/master

Sau đó, bạn chỉ cần chọn chi nhánh bạn muốn hợp nhất. Hãy nhớ rằng đây không phải là các chi nhánh địa phương, chúng được lưu trữ dưới điều khiển từ xa. Nhưng với điều kiện bạn không có một chi nhánh địa phương được gọi là thượng nguồn / chính (được phép), bạn nên kết hợp tốt với dòng dưới đây:

git merge upstream/master

Ngoài ra, bạn có thể tắt tìm nạp / hợp nhất (sau khi tìm nạp ban đầu ít nhất) với dòng này:

git pull upstream/master

Vấn đề là nếu bạn đã có thay đổi, những thay đổi bạn kết hợp sẽ tạo ra một cam kết hợp nhất. Hữu ích trong một số trường hợp, nhưng hầu hết thời gian một chút vô nghĩa.
Pablo Olmos de Aguilera C.

1
Trong những trường hợp git rebaseđó, nó sẽ hoạt động tốt hơn nhiều và loại bỏ những cam kết trống rỗng xấu xí đó
Fruch
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.