2009-04-30 38 views
125

tôi đã thực hiện các bước sau cho đến nay:Làm thế nào để sao chép một chi nhánh Git địa phương để một repo từ xa

  1. nhân bản vô tính một repo Git từ xa
  2. nhánh chi nhánh tổng thể để một thí nghiệm
  3. chỉnh sửa/mã thử nghiệm/cam kết trong chi nhánh thử nghiệm

Bây giờ, tôi chưa sẵn sàng hợp nhất thử nghiệm thành chính. 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 thế 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ủ của remote repo?

+0

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] (http://allmybrain.com/2008/09/15/sharing-git-branches/) –

+0

bản sao có thể có của [Làm thế nào để bạn tạo một nhánh git hiện có theo dõi một nhánh từ xa?] (Http: //stackoverflow.com/questions/520650/how-do-you-make-an-existing-git-branch-track-a-remote-branch) – ahsteele

Trả lời

155

Theo git push manual page:

git push origin experimental 

Tìm một ref phù hợp experimental trong 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 gốc với nó.
Nếu experimental không tồn tại từ xa, nó sẽ được tạo.

Đây là giống như:

git push origin experimental:refs/heads/experimental 

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

Hoặc, như đã đề cập trong git tip, bạn có thể thiết lập "Default Chi nhánh của từ xa" a:

Bạn có thể sử dụng git config để gán một mặc định từ xa đến một chi nhánh nhất định. Điều khiển từ xa mặc định này sẽ được sử dụng để đẩy 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 push 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 gốc.

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

có thể được sử dụng để chỉ định thủ công điều này.


Jan gợi ý (ví git >= 1.7.0) các push -u (hoặc push --set-upstream) tùy chọn:

Đối với mỗi chi nhánh đó là cập nhật hoặc đẩy thành công, thêm thượng nguồn (theo dõi) tài liệu tham khảo, sử dụng bởi git-pull đối số-ít (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 tùy chọn '-u' cho' push' để đảm bảo nhánh địa phương của bạn theo dõi nhánh ở xa sau khi công khai. Nếu bạn quên sử dụng tùy chọn '-u', bạn có thể chỉ cần gõ' git push -u' sau đó trong nhánh, sau đó 'git pull' sẽ hoạt động. – Jan

+0

@Jan: điểm tốt. Tôi đã đưa nó vào câu trả lời. – VonC

+0

Tôi đã nhận thấy rằng khi bạn làm điều này 'git push origin experiment', không có bằng chứng về bất kỳ gói nào được tải lên. Dường như * từ xa đã có tất cả tài liệu từ lần đẩy trước đó của bạn; nó chỉ phải được nối vào refs *. – Kaz

0

Đây là trang github có thẩm quyền để quản lý từ xa github http://github.com/guides/push-a-branch-to-github. Nó sẽ giúp bạn trả lời tất cả các câu hỏi của bạn.

+0

Điều đó không di chuyển nó đến nhánh chính, hay nó sẽ ngầm tạo nguồn gốc/same_branch_name_as_local? – Coocoo4Cocoa

15

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

git push origin experimental 
+0

Cùng một nhận xét như trên, nhưng điều đó có tạo ra nhánh thí nghiệm hoàn toàn trên repo từ xa không, hoặc nó sẽ đẩy tới chủ của từ xa? – Coocoo4Cocoa

+1

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

1

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

Ví dụ: tôi đã sao chép hai kho lưu trữ khác nhau cục bộ và tôi phải sao chép repo2/branch1 để repo1/và sau đó đẩy nó.

This liên kết đã giúp tôi đẩy chi nhánh địa phương của tôi (nhân bản từ repo khác) để repo từ xa của tôi:

Các vấn đề liên quan