Github: Nhập chi nhánh ngược dòng vào ngã ba


169

Tôi có một ngã ba ( origin) từ một dự án ( upstream) trên github. Bây giờ dự án thượng nguồn đã thêm một chi nhánh mới, tôi muốn nhập vào ngã ba của tôi. Làm thế nào để làm điều đó?

Tôi đã thử kiểm tra điều khiển từ xa và tạo một nhánh trên đó, nhưng nó sẽ cấu hình nhánh theo cách mà nó git pushđang cố gắng đẩy tới upstream:

git checkout upstream/branch
git checkout -b branch

biên tập

Có thể điều đó không rõ ràng, nhưng tôi muốn thêm chi nhánh vào kho lưu trữ cục bộ của mình, vì vậy tôi có thể đẩy nó đến origin(ngã ba của tôi) thông qua git push. Bởi vì các kho lưu trữ ngược dòng thường chỉ đọc và bạn chia nó để đóng góp.

Vì vậy, về cơ bản tôi muốn kiểm tra một chi nhánh không tồn tại originmà nội dung của chúng sẽ được lấy từ đó upstream.

Câu trả lời:


262
  1. Hãy chắc chắn rằng bạn đã kéo nhánh ngược dòng mới vào repo cục bộ của mình :

    • Đầu tiên, đảm bảo cây làm việc của bạn sạch sẽ (cam kết / stash / hoàn nguyên mọi thay đổi)
    • Sau đó, git fetch upstreamđể lấy lại nhánh ngược dòng mới
  2. Tạo và chuyển sang phiên bản cục bộ của nhánh ngược dòng mới ( newbranch):

    • git checkout -b newbranch upstream/newbranch
  3. Khi bạn đã sẵn sàng để đẩy chi nhánh mới về nguồn gốc :

    • git push -u origin newbranch

Công tắc -u thiết lập theo dõi đến điều khiển từ xa được chỉ định (trong ví dụ này origin)


6
Tôi tin rằng git fetch upstreamlà một lựa chọn tốt hơn ở bước đầu tiên, vì git pull upstreamđòi hỏi nhiều hành động phải được thực hiện sau git remote add ...cho upstream.
Alexander Pavlov

git pull up return return: You asked to pull from the remote 'upstream', but did not specify a branch. Because this is not the default configured remote for your current branch, you must specify a branch on the command line.Thêm tên nhánh vào cuối lệnh gây ra sự hợp nhất giữa nhánh ở thượng nguồn với nhánh cục bộ hiện tại thay vì cho phép tạo một nhánh cục bộ mới. Có ý kiến ​​gì không?
mMontu

1
Thay thế git pull upstreambằng git fetch upstreamgiải quyết vấn đề, và các bước sau đây đã làm việc.
mMontu

Tôi nhận được: fatal: Không thể cập nhật đường dẫn và chuyển sang nhánh 'ngược dòng' cùng một lúc. Bạn có định thanh toán 'ngược dòng / chính' mà không thể giải quyết như cam kết không?
sureshvv

1
@sureshvv Điều đó có lẽ bởi vì bạn cần phải có một tham chiếu từ xa đến kho lưu trữ ngược dòng có tên ngược dòng trước khi thực hiện bất kỳ điều nào trong số đó. Trong trường hợp bạn không làm như vậy, đó là cách bạn thêm một: git từ xa thêm ngược dòng your_git_upstream_Vposeective_url.git . Đọc điều này nếu bạn cần làm rõ về vấn đề đó.
Gabriel Rainha

7

tôi sẽ dùng

git checkout -b <new_branch> upstream/<new_branch>

Đó thực sự là những gì tôi đã cố gắng ngay cả trước những gì tôi đã giải thích trong câu hỏi; nó dẫn đến kết quả tương tự
chọc

4

Tôi cũng gặp rắc rối với điều này và google đã đưa tôi đến đây. Các giải pháp đã không làm việc tuy nhiên. Vấn đề của tôi là khi tôi thêm ngược dòng, nó đã thiết lập cấu hình git của tôi để chỉ tìm nạp chủ, thay vì tất cả các nhánh. ví dụ như nó trông như thế này

[remote "somebody"]
        url = git@github.com:somebodys/repo.git
        fetch = +refs/heads/master:refs/remotes/upstream/master

Chỉnh sửa .git / config như sau đã khắc phục sự cố của tôi

[remote "somebody"]
        url = git@github.com:somebodys/repo.git
        fetch = +refs/heads/*:refs/remotes/upstream/*

1

Các bước sau đây hoạt động tốt với tôi (giả sử tên nhánh ngược dòng là branch):

$ git fetch upstream
$ git checkout branch
$ git push origin

1
Tôi nhận được git tìm nạp dữ liệu ngược dòng: 'ngược dòng' dường như không phải là một kho lưu trữ git gây tử vong: Không thể đọc từ kho lưu trữ từ xa. Vui lòng đảm bảo rằng bạn có quyền truy cập chính xác và kho lưu trữ tồn tại.
ThinkDigital

0

--track?

git branch --track branch upstream/branch

Có thể tôi hiểu bạn sai, nhưng làm điều đó sẽ thiết lập chi nhánh theo cùng một cách; với pushpuse để upstream.
chọc

Không, tôi nghĩ rằng tôi đã hiểu lầm bạn.
troelskn

0

Tôi đã có một kịch bản phức tạp hơn một chút trong đó tôi đã có một upstreamđịnh nghĩa trong ngã ba của mình (từ repo chính tắc) nhưng cần kiểm tra một nhánh từ một ngã ba khác. Để thực hiện điều đó, quá trình hơi khác nhau. Đây là cấu hình tôi đã kết thúc với:

[remote "origin"]
url = git@github.com:<your_user/org>/<repo>.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
rebase = true
[remote "upstream"]
url = git@github.com:<upstream_user>/<repo>.git
fetch = +refs/heads/*:refs/remotes/upstream/*
[remote "other_user"]
url = git@github.com:<other_user>/<repo>.git
fetch = +refs/heads/*:refs/remotes/<other_user>/*

Bây giờ bạn có thể kiểm tra một chi nhánh từ <other_user>ngã ba là tốt.

git fetch <other_user> <branch>
git checkout -b <branch> <other_user>/<branch>

Điều đó sẽ cung cấp cho bạn một chi nhánh địa phương có nguồn gốc từ ngã ba.

Để đẩy chi nhánh địa phương đó, tôi phải cụ thể với lệnh đẩy của mình.

git push origin <branch>

Điều đó khá giống với câu trả lời được chấp nhận, chỉ là điều khiển từ xa mà bạn đang tìm nạp không được gọi là dòng ngược dòng.
chọc
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.