Câu hỏi Làm thế nào để đẩy một chi nhánh địa phương mới vào kho lưu trữ Git từ xa và theo dõi nó?


Tôi muốn có thể làm như sau:

  1. Tạo một chi nhánh địa phương dựa trên một số chi nhánh khác (từ xa hoặc địa phương) (thông qua git branch hoặc là git checkout -b)

  2. Đẩy chi nhánh địa phương đến kho lưu trữ từ xa (xuất bản), nhưng làm cho nó dễ theo dõi git pull và git push sẽ hoạt động ngay lập tức.

Làm thế nào để làm điều đó?

Tôi biết về --set-upstream trong Git 1.7, nhưng đó là một hành động hậu tạo. Tôi muốn tìm một cách để thực hiện một thay đổi tương tự khi đẩy chi nhánh đến kho lưu trữ từ xa.


3657
2018-05-04 12:58


gốc


có thể trùng lặp Làm thế nào để bạn thực hiện một nhánh git hiện có theo dõi một nhánh từ xa? - markus
chỉ để chỉ ra - set-upstream là -u - Baiyan Huang


Các câu trả lời:


Trong Git 1.7.0 trở lên, bạn có thể thanh toán chi nhánh mới:

git checkout -b <branch>

Chỉnh sửa tệp, thêm và cam kết. Sau đó đẩy với -u (viết tắt của --set-upstream) Tùy chọn:

git push -u origin <branch>

Git sẽ thiết lập thông tin theo dõi trong quá trình đẩy.


5762
2018-06-03 20:50



Cũng cần lưu ý rằng nếu bạn có chi nhánh theo dõi hiện tại đã được đặt trên nhánh bạn đang đẩy và push.default được đặt thành upstream, điều này sẽ không làm những gì bạn nghĩ rằng nó sẽ làm. Nó sẽ cố gắng đẩy chi nhánh theo dõi hiện tại. Sử dụng: git push -u origin mynewfeature:mynewfeature hoặc làm git branch --unset-upstream Đầu tiên. - void.pointer
Tôi vẫn cần phải 'git branch --set-upstream-to origin / remote' để 'trạng thái git' báo cáo chính xác trạng thái nhánh của tôi đối với nhánh từ xa. - Paul Whipp
Đối với những người sử dụng Git từ Visual Studio: Thực ra đây là "Publish Branch" trong Visual Studio. Sau khi thực thi lệnh git push với tham số -u, cuối cùng tôi có thể thấy nhánh của tôi được xuất bản trong giao diện người dùng VS. - Puterdo Borato
Chúng ta có cần -u tùy chọn mỗi khi chúng tôi đẩy chi nhánh đến điều khiển từ xa của nó hoặc chỉ cần nó lần đầu tiên? - Stephane
@Stephane Bạn chỉ cần -u một lần để bắt đầu theo dõi. Sau đó chỉ cần sử dụng git push - Todd


Nếu bạn không chia sẻ repo của bạn với người khác, điều này rất hữu ích để đẩy tất cả các các nhánh của bạn ở xa, và --set-upstream theo dõi chính xác cho bạn:

git push --all -u

(Không chính xác những gì OP đã yêu cầu, nhưng điều này một lớp lót là khá phổ biến)

Nếu bạn đang chia sẻ repo của bạn với những người khác đây không phải là hình thức thực sự tốt như bạn sẽ làm tắc nghẽn repo với tất cả các chi nhánh thử nghiệm tinh ranh của bạn.


448
2018-01-20 11:36



và git pull --all kéo tất cả trở lại nơi khác? kewl - commonpike
Lệnh này thiết lập theo dõi đến đúng nhánh mà không cần phải đẩy bất cứ thứ gì. Cảm ơn bạn. - amey91
Git cho phép cam kết một chi nhánh và không đẩy nó vì những lý do rất tốt. Chỉ sử dụng git push --all giống như thả một phần của kiến ​​trúc git. Nếu nó làm việc cho bạn, nó là hoàn toàn ok, tuyệt vời, làm điều đó mãi mãi. Nhưng XIN không khuyến khích người khác tránh học git chỉ vì đó là cách nhanh chóng để làm mọi thứ. - Federico Razzoli
Điều này thực sự không phải là câu trả lời đúng và không phải là một công cụ tốt để được giới thiệu mà không có một lời giải thích thực sự về những gì nó làm và những gì các tác động được. Xin vui lòng xem xét việc trả lời này xuống. - akronymn
@Federico @akronymn Ở đâu có thể tìm thấy sự nguy hiểm khi làm git push --all -u? - user1823664


Trước khi giới thiệu git push -u, không có git push tùy chọn để có được những gì bạn mong muốn. Bạn phải thêm các câu lệnh cấu hình mới.

Nếu bạn tạo một nhánh mới bằng cách sử dụng:

$ git checkout -b branchB
$ git push origin branchB:branchB

Bạn có thể dùng git config lệnh để tránh chỉnh sửa trực tiếp .git/config tập tin.

$ git config branch.branchB.remote origin
$ git config branch.branchB.merge refs/heads/branchB

Hoặc bạn có thể chỉnh sửa thủ công .git/config để có thông tin theo dõi cho chi nhánh này.

[branch "branchB"]
    remote = origin
    merge = refs/heads/branchB

132
2018-05-04 13:03





Nói một cách đơn giản, để tạo mới địa phương chi nhánh, làm:

git branch <branch-name>

Để đẩy nó vào xa kho lưu trữ, làm:

git push -u origin <branch-name>

111
2018-04-24 12:09



git branch <branch-name> và git checkout -b <branch-name> cả hai tạo ra một chi nhánh nhưng thanh toán chuyển sang chi nhánh mới - Robert
không có dấu ngoặc - jairhumberto
dude bracket là chỉ đề cập đến bạn phải thay thế bằng bất kỳ tên chi nhánh nào bạn muốn tạo và đẩy. - piyushmandovra


Một biến thể nhỏ của các giải pháp đã được đưa ra ở đây:

  1. Tạo một nhánh địa phương dựa trên một số nhánh khác (từ xa hoặc cục bộ):

    git checkout -b branchname
    
  2. Đẩy chi nhánh cục bộ vào kho lưu trữ từ xa (xuất bản), nhưng làm cho nó dễ theo dõi git pull và git push sẽ làm việc ngay lập tức

    git push -u origin HEAD
    

    Sử dụng HEAD là một "cách thuận tiện để đẩy nhánh hiện tại vào cùng tên trên điều khiển từ xa". Nguồn: https://git-scm.com/docs/git-push Trong các thuật ngữ Git, HEAD (viết hoa) là một tham chiếu đến đỉnh của nhánh hiện tại (cây).

    Các -u tùy chọn chỉ là viết tắt của --set-setupstream. Thao tác này sẽ thêm tham chiếu theo dõi ngược dòng cho nhánh hiện tại. bạn có thể xác minh điều này bằng cách tìm trong tệp .git / config của bạn:

    Enter image description here


55
2017-07-05 08:13



Cảm ơn bạn :) git push -u origin <branch-name> không làm việc cho tôi nhưng sử dụng HEAD thay vì <branch-name> làm việc hoàn hảo :) - Daniel Tonon
Cái này làm việc cho tôi. Câu trả lời hàng đầu không hoạt động. - jdhao
tôi yêu HEAD - quá lười biếng để gõ ;-) - user776686
@ user776686 bạn phải biết những gì bạn vừa làm ở đó, phải không? - Yatrix
Yêu câu trả lời này - gõ "HEAD" là cách dễ dàng hơn gõ vào tên đầy đủ của tên chi nhánh (thường dài hoặc phức tạp). - JKubecki


Tôi cho rằng bạn đã nhân bản một dự án như:

git clone http://github.com/myproject.git
  1. Sau đó, trong bản sao cục bộ của bạn, tạo một chi nhánh mới và kiểm tra nó:

    git checkout -b <newbranch>
    
  2. Giả sử bạn đã tạo một "git bare --init" trên máy chủ của bạn và tạo myapp.git, bạn nên:

    git remote add origin ssh://example.com/var/git/myapp.git
    git push origin master
    
  3. Sau đó, người dùng sẽ có thể

    git clone http://example.com/var/git/myapp.git
    

CHÚ THÍCH: Tôi giả định rằng bạn có máy chủ của bạn và chạy. Nếu không, nó sẽ không hoạt động. Cách thực hiện tốt là đây.

THÊM

Thêm một nhánh từ xa:

git push origin master:new_feature_name

Kiểm tra xem mọi thứ có tốt hay không (lấy nguồn gốc và liệt kê các nhánh từ xa):

git fetch origin
git branch -r

Tạo một nhánh địa phương và theo dõi nhánh từ xa:

git checkout -tb new_feature_name origin/new_feature_name

Cập nhật mọi thứ:

git pull

27
2018-05-04 13:04



Kịch bản của William mà tôi liên kết không giống với tùy chọn bổ sung để xóa các nhánh từ xa và một số biện pháp bảo vệ, - Tobias Kienzler
> để đẩy chi nhánh địa phương đến repo từ xa (xuất bản), nhưng làm cho nó> dễ theo dõi để git pull và git push sẽ hoạt động ngay lập tức. những gì github của nó không tự động khi bạn đẩy mã của bạn vào kho lưu trữ của họ :-) - VP.
Điều này không trả lời cho câu hỏi, <newbranch> của repo gốc không thể theo dõi được (và được đổi tên thành <master> là repo mới mà bạn sao chép ở bước 3). - Lohrun
có vẻ như quá mức. không git remote add origin làm cho chi nhánh địa phương có thể theo dõi được? là lệnh then chốt ở đây? - Roni Yaniv
@Roni Yaniv: không git remote add origin chỉ đăng ký một kho lưu trữ từ xa mới. Nó chỉ là một bước cần thiết trước khi đẩy chi nhánh của bạn đến kho lưu trữ từ xa đó (nếu bạn không muốn nhập toàn bộ địa chỉ mỗi lần) - Lohrun


Tôi chỉ đơn giản là làm

git push -u origin localBranch:remoteBranchToBeCreated

qua một dự án đã được nhân bản.

Git tạo ra một chi nhánh mới có tên remoteBranchToBeCreated theo cam kết của tôi, tôi đã làm localBranch.


24
2018-03-20 11:13