Làm cách nào tôi có thể đồng bộ lại một ngã ba từ bản gốc


33

Tôi vừa rẽ nhánh một dự án ở Github. Tôi đã sửa đổi và gửi một yêu cầu kéo. Chủ sở hữu đã hợp nhất ngã ba của tôi với dự án chính và sau đó anh ấy đã thực hiện một số sửa đổi. Vì vậy, bây giờ ngã ba của tôi không được cập nhật với dự án chính. Tôi nhớ những sửa đổi anh ấy đã thực hiện sau khi hợp nhất yêu cầu kéo của tôi. Làm thế nào tôi có thể cập nhật ngã ba của tôi với dự án chính? Có cách nào để làm điều đó trong giao diện web?

Cảm ơn


Tôi viết một hướng dẫn đơn giản. xem tại đây: webapps.stackexchange.com/a/58140/63016
Youngjae

2
Bây giờ đã có một tài liệu chính thức được thực hiện tốt: help.github.com/articles/syncing-a-fork
Andre Miras

Câu trả lời:


36

Theo thiết kế, việc tạo một dự án sẽ tạo ra một repo riêng không được cập nhật khi repo ban đầu thay đổi. Tuy nhiên, gitlàm cho nó khá dễ dàng để cập nhật thủ công.

Bạn cần sự giúp đỡ của kho lưu trữ thứ 3 (bản sao địa phương của bạn đủ). Có 3 repos:

  • "Thượng nguồn": Kho lưu trữ của dự án ngược dòng trên Github.
  • "Origin": Kho lưu trữ của ngã ba của bạn trên Github
  • "Local": Kho lưu trữ cục bộ của bạn trên máy tính. Tôi sẽ giả sử bạn đã tạo nó bằng cách nhân bản Fork bằng cách sử dụng git clone git@github.com:your-username/projectname.gitvà mọi người đang sử dụng chi nhánh master.

Giả sử hiện tại "Nguồn gốc" và "Địa phương" ở cùng một trạng thái và "Thượng nguồn" đi trước 1 hoặc nhiều cam kết (hợp nhất và mọi thay đổi tiếp theo).

Đầu tiên thêm dự án ngược dòng dưới dạng điều khiển từ xa Git :

git remote add upstream https://github.com/upstream-username/projectname.git

Sau đó kéo (có nghĩa là tìm nạp và sau đó tự động hợp nhất ) các thay đổi từ masternhánh của điều khiển từ xa vào nhánh hiện tại ( master) của kho lưu trữ cục bộ của bạn :

git pull upstream master

Bây giờ kho lưu trữ cục bộ của bạn được đồng bộ hóa với upstream. Cuối cùng, đẩy repo cục bộ của bạn đến ngã ba Github của bạn:

git push origin master

Bây giờ mọi thứ đã đồng bộ.


2
Cảm ơn rất nhiều .. thật xấu hổ vì điều này có thể không thể thực hiện được trong giao diện web ..
bAN

1
Điều này thực sự có thể có trên giao diện web: webapps.stackexchange.com/a/31010/10390
thSoft

Yeehaw! Tôi đã xé tóc ra để cố tìm thông tin rõ ràng này. Cám ơn vì đã chia sẻ!
pepoluan

... nhưng vui lòng xem qua các bình luận của câu trả lời, chứng minh rằng Resync qua web không phải là lựa chọn tốt nhất vì nó gây ô nhiễm kho lưu trữ
usr-local-ΕΨΗΕΛΩΝ 29/12/14

Bạn sẽ làm gì khi nó nói "đã cập nhật" sau khi kéo, nhưng rõ ràng là không? (có những tệp tôi đã thay đổi tất cả trong một thư mục con và tôi sẽ không có sự khác biệt trong bất kỳ tệp nào khác, nhưng tôi làm)
roberto tomás

1

Bạn cần thêm một điều khiển từ xa (xem trợ giúp GitHub ) và kéo từ điều khiển mới đó.

git remote add mainProject https://github.com/user/mainProject
git pull mainProject master

0

Tôi tìm thấy câu trả lời này để bổ sung cho câu trả lời ban đầu vì nó chỉ liên quan đến việc đồng bộ hóa một nhánh (chính). Ngoài ra, nếu nhánh đã được tạo ở thượng nguồn kể từ ngã ba của bạn, thì sẽ cần thêm một chút để tạo nó trên ngã ba của bạn.

Câu trả lời ngắn gọn là, để cập nhật ngã ba của bạn với mọi nhánh trên kho lưu trữ ngược dòng, hãy thực hiện lệnh này.

for branch in $(git ls-remote --heads upstream|sed 's#^.*refs/heads/##'); do git push origin refs/remotes/upstream/$branch:refs/heads/$branch; done

Điều này không làm là loại bỏ bất kỳ nhánh nào khỏi ngã ba của bạn đã bị xóa khỏi thượng nguồn. Không có cách nào để tự động hóa điều đó đặc biệt nếu bạn đã tạo các nhánh trên ngã ba của mình.

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.