fatal: Không phải là một tên đối tượng hợp lệ: 'master'


182

Tôi có một máy chủ riêng chạy git 1.7 Khi tôi

git init 

một thư mục nó không tạo ra một nhánh chủ. Nguyên nhân khi tôi làm:

git branch 

nó không liệt kê bất cứ điều gì. Khi tôi làm:

git --bare init

nó tạo ra các tập tin Khi tôi gõ

git branch master 

nó nói rằng:

fatal: Not a valid object name: 'master'.

Kết quả tương tự khi cố gắng tạo một chi nhánh mới:git branch newbranch
Sören

Câu trả lời:


281

Khi tôi tạo git initmột thư mục, nó không tạo ra một nhánh chính

Đây là sự thật, và hành vi dự kiến. Git sẽ không tạo masterchi nhánh cho đến khi bạn cam kết điều gì đó.

Khi tôi làm git --bare initnó tạo ra các tập tin.

Một người không trần git initcũng sẽ tạo ra các tệp tương tự, trong một .gitthư mục ẩn trong thư mục gốc của dự án của bạn.

Khi tôi gõ, git branch masternó báo "fatal: Không phải là tên đối tượng hợp lệ: 'master'"

Đó là một lần nữa hành vi đúng. Cho đến khi bạn cam kết, không có chi nhánh chính.

Bạn chưa hỏi một câu hỏi, nhưng tôi sẽ trả lời câu hỏi mà tôi cho là bạn muốn hỏi. Thêm một hoặc nhiều tệp vào thư mục của bạn và git addchúng để chuẩn bị cam kết. Sau đó, git commitđể tạo cam kết ban đầu và masterchi nhánh của bạn.


3
Vậy, điều gì sẽ xảy ra nếu tôi không bao giờ muốn một con trỏ nhánh gọi là "master"? Nếu tôi muốn nó được gọi là "chính" thì sao? Không có cách nào để bắt đầu với một tên khác cho con trỏ nhánh đầu tiên? Không có tham số "git init"? Tôi có thể thay đổi tên được liệt kê trong .git / HEAD không? Có một số tập tin khác tôi cũng cần phải thay đổi không?
Jemenake

1
@Jemenake Sau đó, khởi tạo kho lưu trữ của bạn, tạo một cam kết và đổi tên chi nhánh. Nếu bạn thực sự muốn tránh một nhánh "chính" từng được tạo, chỉnh sửa .git/HEADvà thay đổi refs/heads/masterthành refs/heads/main, nhưng không có lý do nào để làm điều này. Chỉ cần đổi tên chi nhánh của bạn sau lần cam kết đầu tiên.
meagar

13
bạn có thể sử dụng git checkout -b <branchname>để thay đổi CHÍNH - bạn không cần chỉnh sửa tệp.
Superfly Jon

1
Phần cuối cùng là vàng, TFS GIT đi kèm với repo git hoàn toàn chưa được khởi tạo. Vì vậy, sau lần đầu tiên sử dụng SourceTree, không có gì hoạt động, không thể tìm ra nó trong một thời gian dài cho đến khi "Sau đó, git cam kết tạo ra cam kết ban đầu và chi nhánh chính của bạn". Có thực sự không có cách nào để có master-local / remote mà không có cam kết / đẩy ban đầu không?
Pawel Cioch

Giải thích cuối cùng giúp tôi hiểu chi nhánh không thể tồn tại nếu không có cam kết.
Mayur Patil

23

Git tạo một nhánh chính sau khi bạn thực hiện cam kết đầu tiên. Không có gì để có một chi nhánh nếu không có mã trong kho lưu trữ.


1
Nhưng bạn cần một chi nhánh mới để đẩy vào chủ.
Sören

1
đây là một câu hỏi liên quan đến 'Git tạo một nhánh chính sau khi bạn thực hiện cam kết đầu tiên.' Vậy thì tại sao 'trạng thái git' hiển thị 'On Branch Master' trước tất cả những điều này?
Tick20

16

Trước hết, khi bạn tạo một "kho lưu trữ trần", bạn sẽ không thực hiện bất kỳ công việc nào với nó (nó không chứa bản sao làm việc, vì vậy git branchlệnh này không hữu ích).

Bây giờ, lý do bạn sẽ không có masterchi nhánh ngay cả sau khi thực hiện git initlà vì không có cam kết: khi bạn tạo cam kết đầu tiên, sau đó bạn sẽ có một masterchi nhánh.


1
Được rồi đó là rõ ràng. Nhưng khi tôi cam kết thì nó nói: fatal: danh tính trống rỗng
Roy van Zanten

Tôi đã sửa nó thành. Nhưng khi tôi muốn kéo / lấy repo này từ một máy tính khác. Tôi có nên làm git init ở đó không?
Roy van Zanten

@RoyvanZanten Bạn có thể sử dụng git cloneđể tiết kiệm việc phải thực hiện một git initbên nhận.
Borealid

Tôi quản lý để có được tất cả làm việc. Không có lỗi. Nhưng khi tôi cố gắng đẩy nó nói: Viết đối tượng <bla> bla> Tổng <3/3> Tới SERVER 59fa0tweirdcod04 master> master Nhưng khi tôi kiểm tra các tệp trên máy chủ thì không có gì cả.
Roy van Zanten

@RoyvanZanten Bạn đang xem kho lưu trữ máy chủ hoặc máy chủ làm việc sao chép ? Bạn cần phải làm git checkoutnếu bạn muốn WC phản ánh những gì trong .gitthư mục (đó là nơi bạn đã đẩy).
Borealid

12

Bạn cần phải cam kết ít nhất một lần với chủ trước khi tạo một nhánh mới.

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.