Tại sao 'git branch' của tôi không có chủ?


94

Tôi là một thành viên mới git và tôi vẫn tiếp tục đọc về một nhánh "bậc thầy". "Master" chỉ là một cái tên thông thường mà mọi người đã sử dụng hay nó có ý nghĩa đặc biệt như thế HEADnào?

Khi tôi thực hiện git branchtrên bản sao mà tôi có, tôi chỉ thấy 1 nhánh duy nhất - nhánh tôi đang ở trên. Không có "chủ" nào cả. Nếu tôi nhập git checkout master(như tôi thấy trong rất nhiều hướng dẫn hoặc hướng dẫn), tôi nhận được

error: pathspec 'master' did not match any file(s) known to git.

Tôi chỉ bối rối là tại sao bản sao của tôi không có cái mastermà mọi người dường như ngụ ý rằng nó luôn tồn tại.

Câu trả lời:


73

Hầu hết các kho lưu trữ Git đều sử dụng masterlàm nhánh chính (và mặc định) - nếu bạn khởi tạo kho lưu trữ Git mới thông qua git init, kho lưu trữ đó sẽ masterđược kiểm tra theo mặc định.

Tuy nhiên, nếu bạn sao chép một kho lưu trữ, nhánh mặc định bạn có là bất cứ thứ gì mà điều khiển từ xa HEADtrỏ tới ( HEADthực tế là một tham chiếu tượng trưng trỏ đến tên nhánh). Vì vậy, nếu kho lưu trữ mà bạn sao chép có một điểm HEADchỉ đến, chẳng hạn, foobản sao của bạn sẽ chỉ có một foonhánh.

Điều khiển từ xa bạn đã sao chép có thể vẫn có masternhánh (bạn có thể kiểm tra với git ls-remote origin master), nhưng bạn sẽ không tạo phiên bản cục bộ của nhánh đó theo mặc định, vì git clonechỉ kiểm tra điều khiển từ xa HEAD.


6
Và sau đó làm thế nào để kiểm tra tổng thể từ nguồn gốc nếu nó tồn tại?
Bunyk

làm thế nào để làm bạn thiết lập HEAD để chủ
Matt Smith

32
Tôi đã tạo repo của mình bằng git init và nhánh chính chưa được tạo. Với Github, chi nhánh được tạo tự động, nhưng với Bitbucket thì không. Các bước mising là: git add ., git commit -m "Test", sau đó git push -u origin master.
Shailen

12
@Amber Tôi gặp lỗi này "nghiêm trọng: master: không phải SHA1 hợp lệ"
KK_07k11A0585

1
@Amber git ls-remote origin masterkhông hiển thị bất cứ điều gì.
Parisa Khateri

86

Để kiểm tra một nhánh không tồn tại cục bộ nhưng nằm trong kho lưu trữ từ xa, bạn có thể sử dụng lệnh sau:

git checkout -t -b master origin/master

Cảm ơn vì đã cố gắng giúp đỡ, mặc dù câu hỏi này khá cũ. Nhưng câu trả lời của bạn không phải là những gì tôi đang hỏi.
aberrant80

fatal: Cannot update paths and switch to branch 'master' at the same time.
Raphael Onofre


Cố định tại github tạo ra một chi nhánh tổng thể và thiết lập như mặc định
Raphael Onofre

45

master chỉ là tên của một nhánh, không có gì kỳ diệu về nó ngoại trừ nó được tạo theo mặc định khi một kho lưu trữ mới được tạo.

Bạn có thể thêm nó trở lại với git checkout -b master.


git checkout -b masterchỉ thêm một nhánh mới từ nhánh hiện tại cho tôi.
nnyby

1
@nnyby git checkout -b mastersẽ tạo một masternhánh từ bất kỳ cái gì HEAD- vì vậy nếu bạn đang ở trên một nhánh khác, nó sẽ tạo một masternhánh từ đó. Ngoại trừ nếu bạn đã có một masterchi nhánh (mà bạn sẽ làm, trừ khi bạn đã xóa nó hoặc không bao giờ cam kết trên nó). Nếu bạn đã có một masternhánh, lệnh này sẽ chỉ báo lỗi cho bạn.
Matt Curtis

2
Câu hỏi của tôi là: làm thế nào tôi đã vô tình xóa chủ?
Eric Walker

@EricWalker masterchỉ là một nhánh, có thể bị xóa bằng git branch -d master. Mặc dù git sẽ bảo vệ bạn khỏi việc xóa nhánh bạn đang ở, nhưng không có gì đặc biệt để bảo vệ masternhánh. Cụ thể hơn, rất khó để nói bạn đã làm như thế nào. Có lẽ bạn sử dụng historylệnh của trình bao để xem?
Matt Curtis

1
Xin chào @MattCurtis, câu trả lời của bạn hiện đang gây hiểu nhầm. git checkout -b mastersẽ chỉ hoạt động khi HEAD được đặt thành origin / master. Trong bất kỳ trường hợp nào khác (ví dụ: bạn đang trên 'phát triển'), git checkout -b mastersẽ tạo một nhánh có tên là 'chủ' dựa trên vị trí HEAD hiện tại (ví dụ: từ 'phát triển'). Bạn cũng cần nêu rõ chi nhánh nào sẽ là nhánh mới cho nhánh mới. @Bunyk có câu trả lời chính xác trên chủ đề này: stackoverflow.com/a/21330943/287109
AVIDeveloper

23

Tôi thực sự đã gặp vấn đề tương tự với một kho lưu trữ hoàn toàn mới. Tôi thậm chí đã thử tạo một cái với git checkout -b master, nhưng nó sẽ không tạo nhánh. Sau đó, tôi nhận ra nếu tôi thực hiện một số thay đổi và cam kết chúng, git đã tạo nhánh chính của tôi.


1
Phần gây hiểu lầm là mọi người nói rằng tôi có chủ, nhưng bất cứ điều gì tôi cố gắng làm, tôi sẽ nhận được thông báo lỗi nói rằng tôi không có chủ. (Tôi đang cố gắng tạo một nhánh nhà phát triển trong khi repo của tôi vẫn trống.) Bằng cách commit một cái gì đó (bất kỳ tệp nào), cái chủ bây giờ đã ra đời và tôi có thể tiếp tục làm những việc khác. Tôi đã thử những điều trong các câu trả lời khác, nhưng không giúp được gì. Một câu trả lời ở đây có thể áp dụng cho nhiều người ngoài kia. (. Tôi đọc nhiều về băm trong Git Tôi đoán nếu không có gì ngay từ đầu là, có gì để băm.)
Fai Ng

15

Trong trường hợp của tôi đã có một phát triển chi nhánh nhưng không có chủ chi nhánh. Do đó, tôi đã sao chép kho lưu trữ trỏ HEAD mới được tạo đến nhánh hiện có. Sau đó, tôi tạo nhánh chính bị thiếu và cập nhật HEAD để trỏ đến nhánh chính mới.

git clone git:repositoryname --branch otherbranch
git checkout -b master
git update-ref HEAD master
git push --set-upstream origin master

Ah, chúng ta đi thôi .. Tôi không có chủ hay bất cứ thứ gì. Đầu tiên, tôi đã thêm một tệp mới và cam kết ban đầu - sau đó thực hiện điều này. Làm việc như một nét duyên dáng
Dustin Silk

12

nếu đó là một repo mới mà bạn đã sao chép, nó có thể vẫn trống, trong trường hợp đó:

git push -u origin master

có thể nên sắp xếp nó ra.

(đã làm trong trường hợp của tôi. không chắc đây là vấn đề tương tự, tôi nghĩ tôi nên đăng bài này chỉ trong trường hợp. có thể giúp ích cho người khác.)


8

Tôi gặp phải vấn đề tương tự và tìm ra vấn đề. Khi bạn khởi tạo một kho lưu trữ thực sự không có bất kỳ nhánh nào. Khi bạn bắt đầu chạy dự án git add .và sau đó git commit, nhánh chính sẽ được tạo.

Nếu không kiểm tra bất cứ điều gì trong bạn không có nhánh chính. Trong trường hợp đó, bạn cần làm theo các bước mà những người khác ở đây đã đề xuất.


2
thật. làm một "git init" tiếp theo là "git checkout -b somebranchname" và bạn sẽ không có chi nhánh tổng thể
koem

Điều này cũng có thể không đủ nếu thư mục trống. Vì vậy, để làm cho điều này hoạt động, bạn nên thêm một số tệp. Một sự vụng về khác thực sự đáng thất vọng.
alehro

0

Có vẻ như phải có ít nhất một cam kết cục bộ trên nhánh chính để thực hiện:

git push -u origin master

Vì vậy, nếu bạn đã làm git init .và sau đó git remote add origin ..., bạn vẫn cần phải làm:

git add ...
git commit -m "..."
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.