Làm thế nào để bạn tạo một chi nhánh Git từ xa?


3130

Tôi đã tạo một chi nhánh địa phương mà tôi muốn 'đẩy' ngược dòng. Có một câu hỏi tương tự ở đây trên Stack Overflow về cách theo dõi một nhánh từ xa mới được tạo.

Tuy nhiên, quy trình làm việc của tôi hơi khác nhau. Đầu tiên tôi muốn tạo một chi nhánh địa phương và tôi sẽ chỉ đẩy nó ngược dòng khi tôi hài lòng và muốn chia sẻ chi nhánh của mình.

  • Làm thế nào tôi có thể làm điều đó? (các tìm kiếm google của tôi dường như không tìm thấy bất cứ điều gì).
  • Làm thế nào tôi có thể nói với các đồng nghiệp của tôi để kéo nó từ kho lưu trữ ngược dòng?

CẬP NHẬT Với Git 2.0 có một câu trả lời đơn giản hơn tôi đã viết dưới đây: https://stackoverflow.com/a/27185855/109305


14
có ai từng trả lời bạn câu hỏi thứ hai không? >> Và làm thế nào tôi có thể nói với các đồng nghiệp của mình để kéo nó từ kho lưu trữ ngược dòng?
milkplus


1
@milkplus get fetch --alltìm nạp các nhánh mới ở phía xa (nhưng chỉ get fetch --prunexóa cục bộ các tham chiếu đến các nhánh từ xa đã xóa). Tôi nghĩ, hoặc điều này nên được thiết lập bởi họ tự động, hoặc bạn phải nói chuyện với họ bằng lời nói.
peterh - Tái lập Monica

Câu trả lời:


3732

Đầu tiên, bạn tạo chi nhánh tại địa phương:

git checkout -b <branch-name> # Create a new branch and check it out

Nhánh từ xa được tạo tự động khi bạn đẩy nó đến máy chủ từ xa. Vì vậy, khi bạn cảm thấy sẵn sàng cho nó, bạn có thể làm:

git push <remote-name> <branch-name> 

Trường hợp <remote-name>điển hình là origin, tên mà git ban cho điều khiển từ xa bạn nhân bản từ. Các đồng nghiệp của bạn sau đó sẽ chỉ cần kéo chi nhánh đó và nó sẽ tự động được tạo cục bộ.

Lưu ý tuy nhiên chính thức, định dạng là:

git push <remote-name> <local-branch-name>:<remote-branch-name>

Nhưng khi bạn bỏ qua một cái, nó giả sử cả hai tên nhánh đều giống nhau. Đã nói điều này, như một lời cảnh báo , đừng phạm sai lầm nghiêm trọng chỉ xác định :<remote-branch-name>(với dấu hai chấm), hoặc nhánh từ xa sẽ bị xóa!

Vì vậy, sau đó git pullsẽ biết phải làm gì, thay vào đó bạn có thể muốn sử dụng:

git push --set-upstream <remote-name> <local-branch-name> 

Như được mô tả dưới đây, --set-upstreamtùy chọn thiết lập một nhánh ngược dòng:

Đố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.


85
Lưu ý rằng hành vi mặc định của git là đẩy các ref phù hợp , do đó git push <remote>sẽ không đẩy nhánh nếu nó không xuất hiện <remote>.
Jakub Narębski

222
Bạn có thể muốn sử dụng git push -u <remote-name> <branch-name>thay thế, để sau đó git pullsẽ biết phải làm gì.
Bart Schuller

87
Thay vì chỉ định rõ ràng tên máy chủ, bạn chỉ có thể sử dụng origin, có nghĩa là "máy chủ tôi đã nhận phần còn lại của repo này từ": vì vậy git push origin <branch-name>.
lambshaanxy

68
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

90
Đặt tất cả lại với nhau, git push -u origin <local-branch-name>là những gì làm việc cho tôi.
Samo

881

Trước tiên, bạn phải tạo chi nhánh của mình tại địa phương

git checkout -b your_branch

Sau đó, bạn có thể làm việc tại địa phương trong chi nhánh của mình, khi bạn sẵn sàng chia sẻ chi nhánh, hãy đẩy nó. Lệnh tiếp theo đẩy nhánh đến nguồn gốc kho lưu trữ từ xa và theo dõi nó

git push -u origin your_branch

Đồng đội có thể đến chi nhánh của bạn, bằng cách thực hiện:

git fetch
git checkout origin/your_branch

Bạn có thể tiếp tục làm việc trong nhánh và đẩy bất cứ khi nào bạn muốn mà không chuyển đối số sang git đẩy (đẩy git không tranh luận sẽ đẩy chủ đến chủ từ xa, your_branch cục bộ để từ xa your_branch, v.v ...)

git push

Đồng đội có thể đẩy đến chi nhánh của bạn bằng cách thực hiện các cam kết và sau đó đẩy một cách rõ ràng

... work ...
git commit
... work ...
git commit
git push origin HEAD:refs/heads/your_branch

Hoặc theo dõi chi nhánh để tránh các đối số để git đẩy

git checkout --track -b your_branch origin/your_branch
... work ...
git commit
... work ...
git commit
git push

Có cách nào để tạo một nhánh từ xa mà không tạo một nhánh cục bộ cùng tên không?
Ariel Gabizon

330

Giải pháp Git 2.0+ đơn giản:

Kể từ Git 2.0, hành vi đã trở nên đơn giản hơn :

Bạn có thể cấu hình git với push.default = currentđể làm cho cuộc sống dễ dàng hơn:

Tôi đã thêm cái này để bây giờ tôi có thể đẩy một nhánh mới ngược dòng với

$ git push -u

-usẽ theo dõi chi nhánh từ xa cùng tên. Bây giờ với cấu hình này, bạn sẽ tự động đoán tham chiếu từ xa để git đẩy. Từ tài liệu git.config :

đẩy.default

Xác định hành động đẩy git nên thực hiện nếu không có refspec được đưa ra rõ ràng.

push.default = current- đẩy nhánh hiện tại để cập nhật một nhánh có cùng tên ở đầu nhận. Hoạt động trong cả quy trình làm việc trung tâm và không trung tâm.

Đối với tôi, đây là một sự đơn giản hóa tốt cho quy trình làm việc Git hàng ngày của tôi. Cài đặt cấu hình xử lý trường hợp sử dụng 'thông thường' khi bạn thêm một nhánh cục bộ và muốn tạo nó từ xa. Ngoài ra, tôi có thể dễ dàng tạo các nhánh cục bộ từ xa bằng cách thực hiện git co remote_branch_name(trái ngược với sử dụng --set-upstream-tocờ).

Tôi biết câu hỏi này và các câu trả lời được chấp nhận khá cũ, nhưng hành vi đã thay đổi để bây giờ các tùy chọn cấu hình tồn tại để làm cho quy trình làm việc của bạn đơn giản hơn.

Để thêm vào cấu hình Git toàn cầu của bạn, hãy chạy nó trên dòng lệnh:

$ git config --global push.default current

5
Tôi thấy git push -u origin HEADnhư đã trả lời ở đây dài dòng hơn một chút (bạn viết những gì bạn đang làm) mà không quá nhiều để gõ. Hơn nữa, git push -ukhông có đối số bổ sung nào không hoạt động với tôi nếu nhánh được tạo bằng-t
Qw3ry

git config --global push.default upstream && git checkout -b foo && <change a file> && git push -ukhông hoạt động (như git 2.19.1); đẩy yêu cầu các đối số từ xa và chi nhánh.
knite

Bạn có thể mở rộng về những gì bạn có nghĩa là git co remote_branch_name?
flannelbeard

84

Như đã nêu trong các câu trả lời trước,

git push <remote-name> <local-branch-name>:<remote-branch-name>

là đủ để đẩy một chi nhánh địa phương.

Đồng nghiệp của bạn, có thể kéo tất cả các chi nhánh từ xa (bao gồm cả các chi nhánh mới) bằng lệnh này:

git remote update

Sau đó, để thực hiện thay đổi trên nhánh, luồng thông thường:

git checkout -b <local-branch-name> <remote-name>/<remote-branch-name>

Tôi thích điều này vì nó cho phép tên từ xa khác với tên địa phương
Ariel Gabizon

66

Tạo một nhánh mới cục bộ dựa trên nhánh hiện tại:

git checkout -b newbranch

Cam kết bất kỳ thay đổi như bạn thường làm. Sau đó, đẩy nó ngược dòng:

git push -u origin HEAD

Đây là một phím tắt để đẩy chi nhánh hiện tại đến một chi nhánh cùng tên originvà theo dõi nó để bạn không cần chỉ định origin HEADtrong tương lai.


4
Điều này đã giúp trong trường hợp của tôi : git push -u origin HEAD. Tôi nghĩ đó là cách rõ ràng nhất.
Scadge

2
Vâng, bạn không bao giờ nhớ những gì bạn đã gõ cuối cùng là một nhánh, vì vậy đây là cách để đi.
marksyzm

4
@markyzm Nếu bạn không thể nhớ bạn đang ở chi nhánh nào hoặc bạn đặt tên cho chi nhánh nào, có lẽ bạn không nên thúc ép! Ít nhất, không phải không chạy git statustrước.
Zenexer

1
Vâng, phải chắc chắn rằng thế giới không bùng nổ trong lần đẩy đó; Tôi đồng ý.
marksyzm

1
Đây là cách hiệu quả nhất để tạo một nhánh theo dõi cũng như một nhánh từ xa cùng một lúc. Tôi cũng muốn thêm git remote show originbước thứ ba chỉ để hình dung mối quan hệ theo dõi / theo dõi mới.
hb5fa

54

Nếu bạn muốn tạo một nhánh từ nhánh hiện tại

git checkout -b {your_local_branch_name} 

bạn muốn một chi nhánh từ một chi nhánh từ xa, bạn có thể thử

git checkout -b {your_local_branch_name} origin/<remote_branch_name>

Nếu bạn hoàn thành các thay đổi, bạn có thể thêm tệp.

git add -A or git add <each_file_names>

Sau đó thực hiện một cam kết tại địa phương

git commit -m 'your commit message'

Khi bạn muốn đẩy đến repo từ xa

git push -u origin <your_local_branch_name>

Tất cả sẽ cùng nhau

git checkout -b bug_fixes 

hoặc Nếu bạn muốn tạo một nhánh từ một nhánh từ xa, hãy nói phát triển

kiểm tra git -b bug_fixes nguồn gốc / phát triển

Bạn có thể đẩy đến chi nhánh để repo từ xa bằng cách

git push -u origin bug_fixes

Bất cứ lúc nào bạn muốn cập nhật chi nhánh của mình từ bất kỳ chi nhánh khác nói chủ .

git pull origin master.


46

Nếu bạn thực sự chỉ cần tạo chi nhánh từ xa mà không cần có địa phương, bạn có thể làm như thế này:

git push origin HEAD:refs/heads/foo

Nó đẩy bất cứ thứ gì là ĐẦU của bạn đến nhánh foo không tồn tại trên điều khiển từ xa.


Làm điều này hoàn toàn nhầm lẫn Visual Studio của tôi đến mức nó sẽ không khởi động chính xác. Team Explorer hoàn toàn không tải, nhưng mọi thứ khác cũng bị lỗi. Chỉ cần FYI.
Josh

Nghe có vẻ như nó hoạt động, nhưng khi tôi thực sự dùng thử, máy chủ gitlab của chúng tôi đã không nhận ra kết quả là một nhánh.
JosephH

Chi nhánh nào được foo phân nhánh trên điều khiển từ xa? Điều gì xảy ra nếu tôi muốn foo phân nhánh khỏi foo2? Điều đó có thể không? Cảm ơn bạn.
dùng674669

Nó cũng hoạt động trên máy chủ gerrit, tạo ra một nhánh mới trên điều khiển từ xa không tồn tại trước lệnh này.
MichaelZ

33

Giải pháp dễ nhất ... Trống cuộn ... git phiên bản 2.10.1 (Apple Git-78)

1) git checkout -b localBranchNameThatDoesNotExistInRemote

2) Do your changes, and do a git commit 

3) git push origin localBranchNameThatDoesNotExistInRemote --force

NB - Chi nhánh bạn vừa tạo trong môi trường địa phương và chi nhánh không tồn tại từ xa nơi bạn đang cố gắng đẩy, phải có cùng tên .


3
Cảm ơn đề nghị của bạn. Mặc dù bạn gọi đây là một giải pháp dễ dàng, tôi vẫn nghĩ git push -ulà cách dễ dàng hơn. Yêu cầu bạn có một dòng cấu hình toàn cầu, xem stackoverflow.com/a/27185855/109305 . Tôi sử dụng git push -uliên tục, nó bao gồm 99% các usecase của tôi khi làm việc.
Jesper Rønn-Jensen

30

[Câu trả lời nhanh]

Bạn có thể làm điều đó trong 2 dốc:

1. Sử dụng checkoutđể tạo chi nhánh địa phương:

git checkout -b yourBranchName

2. Sử dụng pushlệnh để tự động tạo nhánh và gửi mã đến kho lưu trữ từ xa:

git push -u origin yourBanchName

Có nhiều cách để làm điều này nhưng tôi nghĩ rằng cách này thực sự đơn giản.


1
Nhanh chóng và đến điểm!
Dev

26

Đầu tiên bạn tạo chi nhánh tại địa phương:

git checkout -b your_branch

Và sau đó để tạo chi nhánh từ xa:

git push --set-upstream origin your_branch

Lưu ý: Điều này hoạt động trên các phiên bản mới nhất của git:

$ git --version
git version 2.3.0

Chúc mừng!


Đây chỉ là văn bản trợ giúp được tạo bởi lệnh git pushkhi nhánh cục bộ của bạn không được điều khiển từ xa.
Nurettin

18

Tạo chi nhánh trên máy cục bộ của bạn và chuyển đổi trong chi nhánh này:

$ git checkout -b [name_of_your_new_branch]

Đẩy nhánh trên github:

$ git push origin [name_of_your_new_branch]

Khi bạn muốn cam kết một cái gì đó trong chi nhánh của bạn, hãy chắc chắn là trong chi nhánh của bạn.

Bạn có thể thấy tất cả các nhánh được tạo bằng cách sử dụng:

$ git branch

Điều này sẽ hiển thị:

* approval_messages
  master
  master_clean

Thêm một điều khiển từ xa mới cho chi nhánh của bạn:

$ git remote add [name_of_your_remote] 

Đẩy các thay đổi từ cam kết của bạn vào chi nhánh của bạn:

$ git push origin [name_of_your_remote]

Cập nhật chi nhánh của bạn khi chi nhánh ban đầu từ kho lưu trữ chính thức đã được cập nhật:

$ git fetch [name_of_your_remote]

Sau đó, bạn cần áp dụng để hợp nhất các thay đổi, nếu chi nhánh của bạn được tạo ra từ sự phát triển, bạn cần phải làm:

$ git merge [name_of_your_remote]/develop

Xóa một nhánh trên hệ thống tập tin cục bộ của bạn:

$ git branch -d [name_of_your_new_branch]

Để buộc xóa chi nhánh cục bộ trên hệ thống tệp của bạn:

$ git branch -D [name_of_your_new_branch]

Xóa chi nhánh trên github:

$ git push origin :[name_of_your_new_branch]

Ở đây tất cả thông tin

Dự án hiện có khác


14

Tạo một nhánh cục bộ từ một nhánh hiện có (có thể là master / developers / any-other-Branch).

kiểm tra git -b Branch_name

Đẩy cái này ra xa

git đẩy -u remote_name local_branch_name: remote_branch_name

Đây,

  1. -u: đặt nhánh ngược dòng
  2. remote_name: git đặt tên theo mặc định là "origin" khi nó tạo kho lưu trữ. Điều này tuy nhiên có thể được thay đổi thành một tên tùy ý khác.
  3. local_branch_name: là tên của nhánh cục bộ sẽ được đẩy.
  4. remote_branch_name: là tên của nhánh từ xa mà chúng ta muốn tạo trên remote.

Nếu chúng ta xóa tên nhánh cục bộ và từ xa, nó sẽ có định dạng

git đẩy -u remote_name Branch_name

Điều này sẽ đẩy nhánh cục bộ đến từ xa và có cùng tên với nhánh nhánh cục bộ. Chi nhánh địa phương cũng sẽ theo dõi chi nhánh từ xa.


10

Tôi biết câu hỏi này đã được trả lời tốt, nhưng chỉ muốn liệt kê các bước tôi thực hiện để tạo chi nhánh mới "myNewBranch" và đẩy sang điều khiển từ xa ("nguồn gốc" trong trường hợp của tôi) và thiết lập theo dõi. Hãy xem đây là phiên bản "TL; DR" :)

# create new branch and checkout that branch
git checkout -b myNewBranch
# now push branch to remote 
git push origin myNewBranch
# set up the new branch to track remote branch from origin
git branch --set-upstream-to=origin/myNewBranch myNewBranch

8

Bây giờ với git, bạn có thể chỉ cần gõ, khi bạn ở trong nhánh chính xác

git push --set-upstream origin <remote-branch-name>

và git tạo cho bạn nhánh gốc.


1
-u là viết tắt của --set-upflow .. vì vậy lệnh có thể là git push -u origin <remote-Branch-name>
Uncaught Exception

gây tử vong: 'nguồn gốc' dường như không phải là kho lưu trữ git
Dmitry Grinko 23/07/18

có lẽ bạn phải đặt nguồn gốc của kho git của mình
Maurizio Brioschi

8

Chỉ muốn thêm vào đó trong khi:

git checkout -b {branchName}

Tạo một nhánh mới, nó cũng kiểm tra nhánh đó / biến nó thành nhánh hiện tại của bạn. Nếu, vì một số lý do, tất cả những gì bạn muốn làm là tắt một nhánh nhưng không biến nó thành nhánh hiện tại của bạn, thì bạn sẽ sử dụng lệnh sau:

git branch {branchName}

Trong lệnh đầu tiên, "thanh toán" làm cho nhánh nói chi nhánh hiện tại của bạn và "-b" có nghĩa là: nhánh này chưa tồn tại, vì vậy hãy tạo nó cho tôi.


6

Cách thực hiện thông qua Tree Tree

 1: Open SourceTree, click on Repository -> Checkout
 2 :Click on Create New Branch
 3: Select branch where from you want to get code for new branch 
 4: Give your branch name
 5: Push the branch  (by click on Push button)

5

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:


3

Đây là cách bạn làm điều đó trong nhật thực thông qua Egit.

1) Chuyển đến chế độ xem "Khám phá kho lưu trữ Git" và triển khai dự án git mà bạn muốn tạo chi nhánh. Trong Brances -> Local .. chọn nhánh mà bạn muốn tạo nhánh (Trong trường hợp của tôi, tôi đã chọn master .. bạn có thể chọn một nhánh khác nếu muốn) .. sau đó nhấp chuột phải và nhấp vào tùy chọn Tạo nhánh .. và chọn thanh toán tùy chọn dự án này và sau đó nhấp vào nút kết thúc.

2) Bây giờ từ trình thám hiểm dự án, chọn dự án .. nhấp chuột phải vào Nhóm -> Đẩy Chi nhánh.

Một nhánh từ xa mới sẽ được tạo ra. Bạn có thể cung cấp tên của chi nhánh cho các đồng nghiệp của mình để họ có thể kéo nó.


Cảnh báo tiếp theo về Egit - và tất cả các khách hàng dựa trên JGit, AFAIK: họ không hỗ trợ .gitattribut! Điều này có nghĩa là nếu nhóm của bạn sử dụng kết hợp Windows (CRLF) và Linux / OSX (LF), bạn phải phụ thuộc vào từng khách hàng có cài đặt phù hợp mọi lúc. Đương nhiên, tốt hơn là quản lý các kết thúc dòng tập trung ở cấp độ repo hoặc dự án và .gitattribut là cách được hỗ trợ để thực hiện việc này. Vì vậy, nếu bạn không nhất thiết phải sử dụng Egit ... đừng! :)
cweekly

2

Tôi đã sử dụng hai cách để tạo chi nhánh

Nếu bạn đang sử dụng TortoiseGit, hãy làm theo các bước sau: -

1. Tạo chi nhánh bằng TortoiseGit

Nhấp chuột phải vào dự án của bạn >>> TortoiseGit >>> Tạo chi nhánh >>> viết tên của chi nhánh và chọn chi nhánh cơ bản sau đó nhấn ok

2.Push chi nhánh

Nhấp chuột phải vào dự án của bạn >>> TortoiseGit >>> đẩy >>> nhấp vào ok

3. Chuyển đến chi nhánh mới

Nhấp chuột phải vào dự án của bạn >>> TortoiseGit >>> Chuyển đổi / Thanh toán >>> chọn chi nhánh mới được tạo và nhấn ok

Nếu bạn đang sử dụng dấu nhắc lệnh, hãy làm theo các bước sau: -

1. Tạo nhánh bằng dấu nhắc lệnh

$ git thanh toán -b new_branch_name

2.Push chi nhánh

$ git đẩy nguồn gốc new_branch_name

3. Chuyển sang chi nhánh mới, nó sẽ chuyển sang new_branch_name nếu không bạn có thể sử dụng

$ git thanh toán new_branch_name


0

Tôi sử dụng cái này và nó khá tiện dụng:

git config --global alias.mkdir '!git checkout -b $1; git status; git push -u origin $1; exit;'

Cách sử dụng: git mkdir NEW_BRANCH

Bạn thậm chí không cần trạng thái git; có lẽ, tôi chỉ muốn chắc chắn rằng mọi thứ sẽ diễn ra tốt đẹp ...

Bạn có thể có cả hai nhánh ĐỊA PHƯƠNG và XÓA bằng một lệnh duy nhấ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.