Git kéo một nhánh từ kho lưu trữ khác?


87

Tôi có kho lưu trữ git cục bộ là bản sao của kho lưu trữ trên github. Ai đó đã chia nhỏ kho lưu trữ và thực hiện các thay đổi trong một nhánh mới trên kho lưu trữ mới. Tôi muốn di chuyển nhánh mới này vào kho lưu trữ của mình (cục bộ để làm việc trên nó trước khi hợp nhất với chính).

Tôi đã thử tạo một nhánh mới và sau đó kéo từ kho lưu trữ đã phân nhánh nhưng nó phàn nàn vì nhánh mới là bản sao của nhánh chính cũng như tệp cục bộ thay đổi, vì vậy nó nói

error: Your local changes to the following files would be overwritten by merge.

Vì vậy, làm thế nào để tôi có thể kéo nhánh trong kho lưu trữ khác thành một nhánh mới trên kho lưu trữ cục bộ của tôi?

Tôi hy vọng điều đó đúng. Nếu không, đây là kho của tôi: https://github.com/MatthewLM/cbitcoin

Như bạn có thể thấy, ai đó đã tạo một kho lưu trữ mới với nhánh "linuxBuild": https://github.com/austonst/cbitcoin/tree/linuxBuild

Tôi muốn chi nhánh đó trên kho lưu trữ cục bộ của mình cho MatthewLM / cbitcoin.

Tôi có thể làm cái này như thế nào?

Câu trả lời:


157

Bạn cần đảm bảo rằng điều đó git statuscho thấy rằng không có thay đổi nào chưa được phân giai đoạn tồn tại trong kho lưu trữ cục bộ của bạn.
Bạn có thể làm điều này bằng cách lưu trữ các thay đổi cục bộ của mình trước tiên và kéo nhánh đó. Sau đó, bạn có thể áp dụng kho của mình.


Nếu bạn muốn tạo lại cấu trúc nhánh của fork trong kho lưu trữ cục bộ của mình, bạn có thể làm như sau:

git remote add fork <url of fork>
git fetch fork
git checkout -b fork_branch fork/<branch>

Điều này sẽ tạo ra chi nhánh cục bộ fork_branchcó cùng lịch sử như <branch>trong ngã ba, tức là fork_branchsẽ phân nhánh của bạn masterở đâu <branch>trong ngã ba. Ngoài ra, chi nhánh địa phương của bạn bây giờ sẽ theo dõi chi nhánh đó trong ngã ba, vì vậy bạn có thể dễ dàng thực hiện các thay đổi mới được cam kết trong ngã ba.

Tôi nghĩ bạn vẫn cần đảm bảo trước rằng bản sao làm việc của bạn không có bất kỳ thay đổi nào.


Được rồi cảm ơn. Điều này sẽ thật tuyệt nếu tôi muốn những thay đổi cục bộ của mình và những cam kết không được tìm thấy trong nhánh từ ngã ba. Nhưng điều gì sẽ xảy ra nếu tôi muốn nhánh mới giống hệt như trên kho lưu trữ fork? Điều đó bao gồm việc xóa mọi cam kết khỏi kho lưu trữ của riêng tôi sau khi fork xảy ra cho chi nhánh mới này. Vì vậy, theo cách đó, nó sẽ giống như thể chi nhánh được tạo trên kho lưu trữ của riêng tôi chứ không phải là một nhánh.
Matthew Mitchell

Chà câu trả lời của bạn là một giải pháp có thể chấp nhận được cho những gì tôi cần làm, nhưng tôi sẽ thấy nó dễ hiểu hơn nếu tôi có thể kéo một nhánh mới vào kho lưu trữ. Tôi sẽ đợi một lúc để xem những gì người khác nói.
Matthew Mitchell

@MatthewMitchell: Vui lòng kiểm tra cập nhật. Có phải đó là thứ bạn tìm?
Daniel Hilgarth

Cuối cùng, tôi đã sử dụng phương pháp hợp nhất nó với một nhánh khác (tôi vừa hợp nhất nó với cái chính), nhưng trong trường hợp tôi chỉ muốn một nhánh chính xác như nó từ một kho lưu trữ khác, tôi sẽ thử tìm nạp và phương pháp thanh toán bạn đã mô tả. Cảm ơn.
Matthew Mitchell

Được sử dụng để di chuyển một nhánh khác "gh-pages" từ một repo khác!
Marcello de Sales

38

Phương pháp mà không cần thêm điều khiển từ xa.

git checkout --orphan fork_branch
git reset --hard
git pull <url of fork> <branch>

2
Cảm ơn bạn vì điều này, tôi đã đánh dấu trang và tiếp tục quay lại với nó!
Shane Smiskol

2
Câu trả lời hay nhất cho năm 2020
Diamond
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.