Cách sao chép một nhánh Git cục bộ vào một repo từ xa


127

Tôi đã thực hiện các bước sau cho đến nay:

  1. Nhân bản một repo Git từ xa
  2. Phân nhánh nhánh chính để thử nghiệm
  3. chỉnh sửa / kiểm tra / cam kết mã trong nhánh thử nghiệm

Bây giờ, tôi chưa sẵn sàng để hợp nhất thử nghiệm vào chủ. Tuy nhiên tôi muốn đẩy nó trở lại repo từ xa vì đó là kho lưu trữ mà tôi chia sẻ với một vài đồng nghiệp. Tôi muốn cho họ thấy những gì tôi đã làm trong nhánh thử nghiệm. Tôi thường chỉ truy cập repo từ xa thông qua SSH.

Làm cách nào để chia sẻ chi nhánh địa phương của tôi trên repo từ xa mà không ảnh hưởng đến chi nhánh chính của repo từ xa?


Liên kết này cũng rất hữu ích trong khía cạnh này. Chia sẻ chi nhánh git
Vishnu Kumar

Câu trả lời:


157

Theo trang hướng dẫn git đẩy :

 git push origin experimental

Tìm một ref phù hợp experimentaltrong kho lưu trữ nguồn (rất có thể, nó sẽ tìm thấy refs/heads/experimental) và cập nhật cùng một ref (ví dụ refs/heads/experimental) trong kho lưu trữ gốc với nó.
Nếu experimentalkhông tồn tại từ xa, nó sẽ được tạo ra .

Điều này giống như:

git push origin experimental:refs/heads/experimental

Tạo nhánh experimentaltrong kho lưu trữ gốc bằng cách sao chép experimentalnhánh hiện tại .
Biểu mẫu này chỉ cần thiết để tạo một nhánh hoặc thẻ mới trong kho lưu trữ từ xa khi tên cục bộ và tên từ xa khác nhau ; nếu không, tên ref sẽ tự hoạt động.

Hoặc, như được đề cập trong mẹo git , bạn có thể thiết lập "Điều khiển từ xa mặc định của chi nhánh":

Bạn có thể sử dụng git config để gán một điều khiển từ xa mặc định cho một nhánh nhất định. Điều khiển từ xa mặc định này sẽ được sử dụng để đẩy chi nhánh đó trừ khi có quy định khác.

Điều này đã được thực hiện cho bạn khi bạn sử dụng git clone, cho phép bạn sử dụng git đẩy mà không có bất kỳ đối số nào để đẩy nhánh chính cục bộ để cập nhật nhánh chính của kho lưu trữ gốc.

git config branch.<name>.remote <remote> 

có thể được sử dụng để xác định điều này bằng tay.


Jan gợi ý (đối với git> = 1.7.0 ) các push -u(hoặc push --set-upstreamtùy chọn):

Đối với mỗi nhánh được cập nhật hoặc được đẩy thành công, hãy thêm tham chiếu ngược dòng (theo dõi), được sử dụng bởi git-pull (1) không có đối số (1) và các lệnh khác.

Bằng cách đó, bạn không phải thực hiện bất kỳ cấu hình git nào.

git push -u origin experimental

12
Bạn nên sử dụng -utùy chọn pushđể đảm bảo rằng chi nhánh địa phương của bạn theo dõi điều khiển từ xa sau khi công khai. Nếu bạn quên sử dụng -utùy chọn, bạn có thể chỉ cần gõ git push -usau đó trong nhánh, sau đó git pullsẽ hoạt động.
Jan

Tôi đã thông báo rằng khi bạn làm điều này git push origin experimental, không có bằng chứng về bất kỳ gói nào được tải lên. Có vẻ như điều khiển từ xa đã có tất cả các tài liệu từ lần đẩy trước đó của bạn; nó chỉ cần được nối vào các ref .
Kaz

@Kaz: nó sẽ có tất cả các tài liệu nếu những cam kết mới đó đã được đẩy vào một chi nhánh khác trên điều khiển từ xa. Trong trường hợp đó, git push origin experimentalsẽ chỉ tạo chi nhánh experimentaltrên điều khiển từ xa.
VonC

Cảm ơn bạn! Câu trả lời của bạn rất hữu ích.
hakre

15

Nếu tên của chi nhánh của bạn là experimentalvà tên của điều khiển từ xa origin, thì đó là

git push origin experimental

Cùng một nhận xét như trên, nhưng điều đó có tạo ra nhánh thử nghiệm ngầm trên repo từ xa không, hay nó sẽ đẩy sang chủ của remote?
Coocoo4Cocoa

1
nó đẩy nhánh thử nghiệm và không chạm vào chủ ở phía địa phương hoặc từ xa
John Douthat

1

git push -u <remote-name> <branch-name>không hoạt động nếu nhánh mới được tạo không sinh ra từ cùng một repo, tức là nếu bạn chưa tạo nhánh mới bằng cách sử dụng git checkout -b new_branch, thì nó sẽ không hoạt động.

Ví dụ, tôi đã nhân bản hai kho lưu trữ khác nhau cục bộ và tôi đã phải sao chép repo2 / Branch1 sang repo1 / và sau đó cũng đẩy nó.

Liên kết này đã giúp tôi đẩy chi nhánh địa phương của mình (được nhân bản từ một repo khác) sang repo từ xa của tôi:



0

tl; dr

$ git push --set-upstream origin your_new_branch

thêm thông tin

sau khi bạn đã thực hiện một số cam kết vào:

$ git checkout -b your_new_branch
$ git add file
$ git commit -m "changed file"

bạn đẩy chi nhánh của mình chỉ định một luồng ngược vào một trong các kho từ xa như sau:

$ git push --set-upstream REMOTE YOUR_BRANCH

điều khiển từ xa có thể được nhìn thấy bởi

$ git remote -v

thông thường, bạn sẽ có điều khiển từ xa mặc định origin. Vì vậy, lệnh của bạn sẽ trông như:

$ git push --set-upstream origin your_new_branch

và tất cả các kết quả đẩy có thể được thực hiện chỉ với git push.

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.