Làm thế nào tôi có thể chuyển sang một chi nhánh khác trong git?


222

Mà một trong những dòng này là chính xác?

git checkout 'another_branch'

Hoặc là

git checkout origin 'another_branch'

Hoặc là

git checkout origin/'another_branch'

Và sự khác biệt giữa các dòng này là gì?



32
git checkout [branch]đối với hầu hết người dùng đến với câu hỏi này
JGallardo

Câu trả lời:


225

Nếu another_branchđã tồn tại cục bộ và bạn không ở trong nhánh này, thì hãy git checkout another_branchchuyển sang nhánh.

Nếu another_branchkhông tồn tại nhưng origin/another_branchkhông, thì git checkout another_branchtương đương với git checkout -b another_branch origin/another_branch; git branch -u origin/another_branch. Đó là để tạo another_branchtừ origin/another_branchvà thiết lập origin/another_branchnhư là thượng nguồn của another_branch.

Nếu không tồn tại, git checkout another_branchtrả về lỗi.

git checkout origin another_branchtrả về lỗi trong hầu hết các trường hợp. Nếu originlà bản sửa đổi và another_branchlà một tệp, thì nó sẽ kiểm tra tệp của bản sửa đổi đó nhưng có lẽ đó không phải là điều bạn mong đợi. originchủ yếu được sử dụng trong git fetch, git pullgit pushnhư một điều khiển từ xa, một bí danh của url vào kho từ xa.

git checkout origin/another_branchthành công nếu origin/another_branchtồn tại Nó dẫn đến trạng thái CHÍNH tách ra, không phải trên bất kỳ chi nhánh nào. Nếu bạn thực hiện các cam kết mới, các cam kết mới không thể truy cập được từ bất kỳ chi nhánh hiện có nào và không có chi nhánh nào sẽ được cập nhật.

CẬP NHẬT :

Vì 2.23.0 đã được phát hành, với nó, chúng ta cũng có thể sử dụng git switchđể tạo và chuyển đổi các nhánh.

Nếu footồn tại, hãy thử chuyển sang foo:

git switch foo

Nếu fookhông tồn tại và origin/footồn tại, hãy thử tạo footừ origin/foorồi chuyển sang foo:

git switch -c foo origin/foo
# or simply
git switch foo

Nói chung, nếu fookhông tồn tại, hãy thử tạo footừ một ref hoặc cam kết đã biết và sau đó chuyển sang foo:

git switch -c foo <ref>
git switch -c foo <commit>

Nếu chúng tôi duy trì một kho lưu trữ trong Gitlab và Github cùng một lúc, kho lưu trữ cục bộ có thể có hai điều khiển từ xa, ví dụ, origincho Gitlab và githubcho Github. Trong trường hợp này, kho lưu trữ có origin/foogithub/foo. git switch foosẽ khiếu nại fatal: invalid reference: foo, bởi vì nó không biết từ đó ref, origin/foohoặc github/foo, để tạo foo. Chúng ta cần chỉ định nó với git switch -c foo origin/foohoặc git switch -c foo github/footheo nhu cầu. Nếu chúng ta muốn tạo các nhánh từ cả hai nhánh từ xa, tốt hơn là sử dụng tên phân biệt cho các nhánh mới:

git switch -c gitlab_foo origin/foo
git switch -c github_foo github/foo

Nếu footồn tại, hãy thử tạo lại / buộc tạo footừ (hoặc đặt lại foothành) một tham chiếu hoặc cam kết đã biết và sau đó chuyển sang foo:

git switch -C foo <ref>
git switch -C foo <commit>

tương đương với:

git switch foo
git reset [<ref>|<commit>] --hard

Hãy thử chuyển sang một ĐẦU tách rời của một giới thiệu hoặc cam kết đã biết:

git switch -d <ref>
git switch -d <commit>

Nếu bạn chỉ muốn tạo một nhánh nhưng không chuyển sang nó, hãy sử dụng git branchthay thế. Cố gắng tạo một nhánh từ một ref hoặc commit đã biết:

git branch foo <ref>
git branch foo <commit>

24
Câu trả lời này là chính xác (như thường lệ và được nâng cấp), nhưng theo tôi, tôi sẽ thêm một nhận xét thể hữu ích: theo tôi, git checkoutlệnh này có quá nhiều thứ. Đó là lý do tại sao có rất nhiều chế độ hoạt động ở đây. Nếu điều duy nhất git checkoutđã làm là chuyển nhánh, câu trả lời sẽ đơn giản, nhưng nó cũng có thể tạo các nhánh và thậm chí trích xuất các tệp từ các xác nhận cụ thể mà không cần chuyển nhánh.

11
Đây là câu trả lời đúng, nhưng cho thấy git bị vướng vào dòng lệnh như thế nào. kiểm tra git để chuyển chi nhánh?
thang

3
@thang Vâng, với bản phát hành 2.23.0, điều này đã được khắc phục: bây giờ bạn có thể sử dụng git switchđể chuyển sang một chi nhánh.
huyền thoại2k

Switch dường như không hoạt động cho phiên bản git này. Tôi sử dụng gì để chuyển sang một nhánh khác trong phiên bản git này? C: \ widget> git --version git phiên bản 2.11.0.windows.3 C: \ widget> git switch master git: 'switch' không phải là lệnh git. Xem 'git - trợ giúp'. C: \ widget>
John

1
@John sử dụng git checkoutthay cho các phiên bản cũ, cũng hoạt động trong các phiên bản hiện đại.
ElpieKay

66

Chuyển sang một chi nhánh khác trong git. Câu trả lời thẳng thắn,

git-checkout - Chuyển nhánh hoặc khôi phục tập tin cây làm việc

git fetch origin         <----this will fetch the branch
git checkout branch_name <--- Switching the branch

Trước khi chuyển đổi chi nhánh, đảm bảo bạn không có bất kỳ tệp sửa đổi nào, trong trường hợp đó, bạn có thể cam kết thay đổi hoặc bạn có thể bỏ qua nó.


Lệnh cuối cùng đưa tôi vào trạng thái ĐẦU tách ra. Có nghĩa là người ta không thể chỉnh sửa chi nhánh.

2
Chi nhánh bạn đang cố gắng thanh toán không được tìm nạp thì bạn cần tìm nạp trước khi thanh toán. Bạn có thể bỏ qua việc tìm nạp nếu chi nhánh được cập nhật sau đó chỉ cần sử dụng tên chi nhánh kiểm tra git.
danglingpulum

Sẽ không đủ để thực hiện một "git pull" sau khi đã chuyển sang chi nhánh?

kéo cũng ok, kéo không tìm nạp và hợp nhất với nhau trong nền. Tôi không thấy bất kỳ khác biệt.
danglingpulum

17

[ git checkout "branch_name"]

là một cách khác để nói:

[ git checkout -b branch_name origin/branch_name]

trong trường hợp "Branch_name" chỉ tồn tại từ xa.

[ git checkout -b branch_name origin/branch_name] là hữu ích trong trường hợp bạn có nhiều điều khiển từ xa.

Về [ git checkout origin 'another_branch'] Tôi không chắc điều này là có thể, AFAK bạn có thể thực hiện việc này bằng cách sử dụng lệnh "tìm nạp" - [ git fetch origin 'another_branch']


Tôi biết lệnh "git checkout -b BranchName" để tạo một nhánh khác. Đây không phải là câu hỏi!

10

Với Git 2.23 trở đi, người ta có thể sử dụng git switch <branch name>để chuyển nhánh.


6

Những gì làm việc cho tôi là như sau:

Chuyển sang nhánh cần thiết:

git checkout -b BranchName

Và sau đó tôi kéo "chủ" bằng cách:

git pull origin master

6

Các lệnh hữu ích để làm việc trong cuộc sống hàng ngày:

git checkout -b "branchname" ->  creates new branch
git branch                   ->  lists all branches
git checkout "branchname"    ->  switches to your branch
git push origin "branchname" ->  Pushes to your branch
git add */filename           -> Stages *(All files) or by given file name
git commit -m "commit message" -> Commits staged files
git push                     -> Pushes to your current branch

5

Nếu bạn muốn chi nhánh theo dõi chi nhánh từ xa, rất nhập nếu bạn muốn thực hiện thay đổi cho chi nhánh và kéo thay đổi, v.v., bạn cần sử dụng thêm một -t cho thanh toán thực tế, ví dụ: git checkout -t branchname


4

Kiểm tra : git branch -a

Nếu bạn chỉ nhận được một chi nhánh. Sau đó làm các bước dưới đây.

  • Bước 1 : git config --list
  • Bước 2 : git config --unset remote.origin.fetch
  • Bước 3 : git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/*

2
Tôi tự hỏi làm thế nào loạt lệnh này sẽ chuyển sang một nhánh khác.

Điều này có thể hữu ích khi bạn thực hiện một bản sao nông (sử dụng depthparam) trước đây và bây giờ tự hỏi tại sao bạn không thể tìm nạp các nhánh từ xa khác error: pathspec 'another_branch' did not match any file(s) known to gitbằng cách sử dụng các lệnh được đề xuất ở trên. Nó chắc chắn không phải là những gì câu hỏi ban đầu là về nhưng nó có thể giúp những người khác gãi đầu ở đây.
luciash d 'là

0

Tôi đang sử dụng điều này để chuyển đổi một chi nhánh sang bất kỳ ai khác mà bạn có thể sử dụng nó làm việc cho tôi như sự quyến rũ.

git switch [BranchName] HOẶC kiểm tra git [BranchName]

ví dụ: git switch phát triển HOẶC
kiểm tra git phát triển

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.