Hợp nhất git repo vào nhánh của repo khác


120

Cho repo Foo và repo Bar. Tôi muốn hợp nhất Bar với Foo, nhưng chỉ thành một nhánh riêng biệt, được gọi làbaz .

git checkout -b baz <= đặt quầy Bar ở đây.

Câu trả lời:


230

Bạn không thể hợp nhất một kho lưu trữ vào một chi nhánh . Bạn có thể hợp nhất một nhánh từ kho lưu trữ khác thành một nhánh trong kho lưu trữ cục bộ của bạn. Giả sử rằng bạn có hai kho lưu trữ foobarcả hai đều nằm trong thư mục hiện tại của bạn:

$ ls
foo bar

Thay đổi vào fookho lưu trữ:

$ cd foo

Thêm barkho lưu trữ làm điều khiển từ xa và tìm nạp nó:

$ git remote add bar ../bar
$ git remote update

Tạo một nhánh mới baztrong fookho lưu trữ dựa trên bất kỳ nhánh nào hiện tại của bạn:

$ git checkout -b baz

Hợp nhất nhánh somebranchtừ barkho lưu trữ vào nhánh hiện tại:

$ git merge --allow-unrelated-histories bar/somebranch

( --allow-unrelated-historieskhông bắt buộc trước phiên bản git 2.9)


21
vì git 2.9 có thể bạn sẽ cần thêm --allow-unrelated-historieslệnh git merge.
Drasill

2
Thông tin về nhận xét từ @Drasill: github.com/git/git/blob/master/Documentation/RelNotes/…
GaTechThomas

10
Tôi không biết mình đang làm gì và tôi thực sự không thể đọc được điều này với trình giữ chỗ foo / bar. Ai có thể chỉnh sửa điều này với các ví dụ thực tế trong cuộc sống thực tế (như các liên kết nếu thích hợp và như vậy)?
rien333

Ooh, điều này thật tuyệt. Tôi muốn hợp nhất nó thành một thư mục con. Nó không thể khác được, phải không? Tôi muốn bước đó được thêm vào.
macetw

1
Tôi nhận được hàng tấn xung đột hợp nhất. Dù sao bạn có thể buộc hợp nhất vào một chi nhánh mới?
nomadoda

41

Cập nhật bằng các lệnh "đời thực":

Bắt đầu từ thư mục repo của bạn, đảm bảo rằng bản sao làm việc của bạn sạch sẽ (không có tệp nào bị thay đổi, thêm hoặc xóa).


Tạo một chi nhánh mới:

git checkout -b <my-branch>

Thêm điều khiển từ xa phụ, sau đó tìm nạp nó:

git remote add <repo-name> git@github.com:xxx/<repo-name>.git
git remote update

Hợp nhất một trong các chi nhánh của họ vào chi nhánh hiện tại của bạn:

git merge <repo-name>/<their-branch>


Nếu bạn không biết <their-branch>mình muốn cái nào, hãy bắt đầumaster

Nếu bạn chắc chắn muốn chấp nhận tất cả các thay đổi từ xa và tránh xung đột ( ghi đè lên ) thì bạn có thể chỉ định -X theirslàm tùy chọn chogit merge trong bước cuối cùng.

Nếu bạn muốn thêm nó vào một thư mục con thì có lẽ bạn nên sử dụng mô-đun con git


3

Sử dụng hướng dẫn từ larsks, tôi đã có thể thực hiện việc này bằng SourceTree.

  1. Đã tạo một nhánh trong kho lưu trữ đích
  2. Đã thêm kho lưu trữ nguồn làm điều khiển từ xa, bằng cách nhấn vào nút Cài đặt và thêm kho lưu trữ nguồn.
  3. Các nhánh từ cả hai kho lưu trữ hiện hiển thị trong danh sách nhánh. Tôi đã sử dụng công cụ hợp nhất để hợp nhất một nhánh từ kho lưu trữ nguồn với chi nhánh của kho lưu trữ đích mới của tôi.
  4. Đã giải quyết mọi xung đột bằng SourceTree hoặc IDE của tôi
  5. Cam kết những thay đổi trong chi nhánh của tôi.
  6. Xóa kho nguồn khỏi danh sách từ xa bằng cách sử dụng nút Cài đặt.
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.