Làm thế nào để tải về một chi nhánh với git?


214

Tôi có một dự án được lưu trữ trên GitHub. Tôi đã tạo một nhánh trên một máy tính, sau đó đẩy các thay đổi của mình sang GitHub bằng:

git push origin branch-name

Bây giờ tôi đang ở trên một máy tính khác và tôi muốn tải xuống chi nhánh đó. Vì vậy, tôi đã cố gắng:

git pull origin branch-name

... nhưng tất cả những điều này đã ghi đè lên nhánh chính của tôi với những thay đổi trong nhánh mới của tôi.

Tôi cần làm gì để kéo chi nhánh từ xa của mình mà không ghi đè lên các nhánh hiện có?

Câu trả lời:


375

Nhờ một câu hỏi liên quan , tôi phát hiện ra rằng tôi cần "kiểm tra" chi nhánh từ xa như một chi nhánh địa phương mới và chỉ định một tên chi nhánh địa phương mới.

git checkout -b newlocalbranchname origin/branch-name

Hoặc bạn có thể làm:

git checkout -t origin/branch-name

Cái sau sẽ tạo ra một nhánh cũng được thiết lập để theo dõi nhánh từ xa.


Cập nhật: Đã 5 năm kể từ khi tôi đăng câu hỏi này. Tôi đã học được rất nhiều và git đã được cải thiện kể từ đó. Quy trình làm việc thông thường của tôi bây giờ hơi khác một chút.

Nếu tôi muốn tìm nạp các nhánh từ xa, tôi chỉ cần chạy:

git pull

Điều này sẽ lấy tất cả các nhánh từ xa và hợp nhất nhánh hiện tại. Nó sẽ hiển thị một đầu ra trông giống như thế này:

From github.com:andrewhavens/example-project
   dbd07ad..4316d29  master     -> origin/master
 * [new branch]      production -> origin/production
 * [new branch]      my-bugfix-branch -> origin/my-bugfix-branch
First, rewinding head to replay your work on top of it...
Fast-forwarded master to 4316d296c55ac2e13992a22161fc327944bcf5b8.

Bây giờ git biết về cái mới của tôi my-bugfix-branch. Để chuyển sang chi nhánh này, tôi chỉ cần chạy:

git checkout my-bugfix-branch

Thông thường, tôi sẽ cần tạo chi nhánh trước khi tôi có thể kiểm tra nó, nhưng trong các phiên bản mới hơn của git, đủ thông minh để biết rằng bạn muốn kiểm tra một bản sao cục bộ của chi nhánh từ xa này.


Tôi đang sử dụng GIT 1.7.2.5 và lệnh hoạt động với tôi là : git branch --track XX origin/XX. Lệnh của bạn cho tôi một lỗi.
dimitarvp

8
Nếu bạn không tải xuống tất cả các chi nhánh từ xa, điều này có thể thất bại. Làm "git cập nhật từ xa" để kéo chúng xuống.
Ben Walding

1
Trên thực tế, nó có thể còn ngắn hơn "tên chi nhánh git checkout". Nếu tên nhánh giống như nhánh theo dõi từ xa (nghĩa là tên gốc / tên nhánh), thì nó sẽ tự động là nhánh theo dõi cục bộ.
DavidN

64

Đối với bất kỳ người mới sử dụng Git nào như tôi, đây là một số bước bạn có thể thực hiện để tải xuống kho lưu trữ từ xa, sau đó chuyển sang chi nhánh mà bạn muốn xem. Họ có thể lạm dụng Git theo một cách nào đó, nhưng nó đã làm việc cho tôi! :-)

Sao chép kho lưu trữ mà bạn muốn tải xuống mã cho (trong ví dụ này tôi đã chọn dự án LRResty trên Github):

$ git clone https://github.com/lukeredpath/LRResty.git
$ cd LRResty

Kiểm tra nhánh nào bạn đang sử dụng tại thời điểm này (nó phải là nhánh chính):

$ git branch    
* master

Kiểm tra chi nhánh bạn muốn, trong trường hợp của tôi, nó được gọi là 'arcified':

 $ git checkout -b arcified origin/arcified
 Branch arcified set up to track remote branch arcified from origin.
 Switched to a new branch 'arcified'

Xác nhận bạn hiện đang sử dụng chi nhánh bạn muốn:

$ git branch    
* arcified
  master

Nếu bạn muốn cập nhật lại mã sau, hãy chạy git pull:

$ git pull
Already up-to-date.

"Họ có thể lạm dụng Git theo một cách nào đó" - không, điều này hoàn toàn chính xác.
Big McLUNDHuge

27

Bạn có thể sử dụng git từ xa như:

git fetch origin

và sau đó thiết lập một nhánh cục bộ để theo dõi nhánh từ xa như dưới đây:

git branch --track [local-branch-name] origin/remote-branch-name

Bây giờ bạn sẽ có nội dung của nhánh github từ xa trong tên nhánh cục bộ.

Bạn có thể chuyển sang tên chi nhánh địa phương đó và bắt đầu công việc:

git checkout [local-branch-name]

17

bạn có thể dùng :

git clone <url> --branch <branch>

để sao chép / chỉ tải xuống nội dung của chi nhánh.

Điều này đặc biệt hữu ích với tôi, vì nội dung của chi nhánh của tôi hoàn toàn khác với chi nhánh chính (mặc dù điều này không thường xảy ra). Do đó, các đề xuất được liệt kê bởi những người khác ở trên đã không giúp tôi và cuối cùng tôi sẽ nhận được một bản sao của chủ ngay cả sau khi tôi kiểm tra chi nhánh và thực hiện thao tác git.

Lệnh này sẽ trực tiếp cung cấp cho bạn các nội dung của chi nhánh. Nó làm việc cho tôi.


1
Đây là câu trả lời tốt nhất. Đơn giản và hiệu quả.
derek

2
Điều này dường như không làm việc cho tôi. Nó nói rằng đã có một thư mục có tên đó (tất nhiên là có)
Jonathan Tuzman

1
@Jonathan Nó sẽ không nối một chi nhánh mới với chi nhánh hiện tại của bạn. Nó chỉ có thể được sử dụng để sao chép một bản sao mới. Tôi không thấy lý do tại sao nên có một thư mục có tên đó nếu bạn chưa sao chép kho lưu trữ. Hãy thử nhân bản ở một địa điểm khác.
Markus cũ

Không cập nhật dự án hiện có với chi nhánh mới
Dazzle

16

Điều hướng đến thư mục trên máy mới mà bạn muốn tải xuống từ git trên git bash.

Sử dụng lệnh dưới đây để tải xuống mã từ bất kỳ chi nhánh nào bạn thích

git clone 'git ssh url' -b 'Branch Name'

Nó sẽ tải về mã chi nhánh tương ứng.


9

Git clone và cd trong tên repo:

$ git clone https://github.com/PabloEzequiel/iOS-AppleWach.git
Cloning into 'iOS-AppleWach'...
$ cd iOS-AppleWach

Chuyển sang chi nhánh (trang GitHub) mà tôi muốn:

$ git checkout -b gh-pages origin/gh-pages
Branch gh-pages set up to track remote branch gh-pages from origin.
Switched to a new branch 'gh-pages'

Và kéo chi nhánh:

$ git pull
Already up-to-date.

ls:

$ ls
index.html      params.json     stylesheets


0

Bạn co thể thử

git fetch <remoteName> <branchName>

Ví dụ:

git fetch origin MyRemoteBranch

-8

Tạo một thư mục mới và thay vào đó làm một bản sao.

git clone (địa chỉ xuất xứ) (tên chi nhánh)


3
Bạn không thể sao chép chỉ một nhánh trong Git. Chỉ có một bản sao lưu trữ đầy đủ có thể được thực hiện.
Alan Haggai Alavi
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.