Thông báo 'src refspec master không khớp với bất kỳ' khi đẩy các xác nhận trong Git


2690

Tôi sao chép kho lưu trữ của mình với:

git clone ssh://xxxxx/xx.git 

Nhưng sau khi tôi thay đổi một số tập tin và addcommithọ, tôi muốn đẩy họ đến máy chủ:

git add xxx.php
git commit -m "TEST"
git push origin master

Nhưng lỗi tôi nhận lại là:

error: src refspec master does not match any.  
error: failed to push some refs to 'ssh://xxxxx.com/project.git'

26
@Marco Đó không phải là một bản sao. Đó là một vấn đề rất cụ thể về việc đẩy một chi nhánh địa phương đến một chi nhánh từ xa. Đây là về việc khởi tạo một repo và đẩy nó lên. Họ tạo ra cùng một lỗi, nhưng LÝ DO họ tạo ra lỗi đó và các bản sửa lỗi hoàn toàn khác nhau. Ngoài ra, sinoohe, bạn nên chấp nhận một câu trả lời. Có lẽ là người đầu tiên, nhìn thấy nó trả lời câu hỏi và đã giúp hơn 350 người.
tandrewnichols

Bạn đã thiết lập các lệnh git config để cài đặt và định cấu hình git trên toàn cầu trên máy của mình chưa?
IgorGanapolsky

1
Hy vọng bài đăng này sẽ hữu ích với ai đó- samranga.blogspot.com/2015/07/ Kẻ lỗi trong câu hỏi có thể xuất hiện ngay cả khi cố gắng tạo kho lưu trữ BitBucket từ một dự án đã có tại địa phương
Samitha Chathuranga

Tôi đã nhận được lỗi này khi cố gắng đẩy tên chi nhánh sai. Đã giải quyết bằng cách sử dụng git statusđể có được một cái thích hợp.
Tom Howard

5
Một nhiệm vụ đơn giản khác đã gây khó khăn cho Git. Các nhà phát triển Git nên sử dụng Stack Overflow làm phản hồi trong vòng SDLC của họ. Hơn 850.000 người nên chỉ ra điều gì đó sai nghiêm trọng với quy trình làm việc của Git. Họ cần phải thuê một chuyên gia về UX bởi vì họ rõ ràng không thể tự mình git nó.
jww

Câu trả lời:


4140

Có lẽ bạn chỉ cần cam kết. Tôi gặp phải điều này khi tôi làm:

mkdir repo && cd repo
git remote add origin /path/to/origin.git
git add .

Giáo sư! Không bao giờ cam kết!

git push -u origin master
error: src refspec master does not match any.

Tất cả tôi phải làm là:

git commit -m "initial commit"
git push origin master

Sự thành công!


130
Đừng chỉ làm theo bước này một cách mù quáng, hãy nhìn vào những gì @Vi đã đề cập và sau đó sửa đổi lệnh đẩy của bạn để sửa lỗi ref.
Kumar

49
Lý do có thể xảy ra nhất cho lỗi này là tất cả các tệp không được theo dõi và chưa được thêm vào. git add --alltrong trường hợp bạn muốn thêm tất cả các tệp Hoặc bạn có thể chọn lọc thêm tệp. Sau đó git commit -m "Initial comment", git push origin master. Điều này chắc chắn sẽ làm việc.
Bhanu Pratap Singh

6
Khắc phục sự cố khác nhau rất hay nhưng không thực sự là câu trả lời cho Câu hỏi thực tế này .
Michael Durrant

7
git commit -m 'initial commit'nên được trích dẫn gấp đôi. ' git commit -m "initial commit", Ít nhất là trên các cửa sổ.
dance2die

5
Một lý do có thể khác: bạn không thực sự có một chi nhánh được gọi là chủ
CarlosAS

843
  1. Hãy thử git show-refxem những gì bạn có. Có phải không refs/heads/master?

  2. Bạn có thể thử git push origin HEAD:masternhư một giải pháp độc lập tham chiếu cục bộ hơn. Điều này nói rõ rằng bạn muốn đẩy ref cục bộ HEADsang ref từ xa master(xem tài liệu refspec git-đẩy ).


6
chi nhánh chính của tôi không đứng đầu các cam kết! Vì vậy, tôi đã tạo ra một nhánh ở cuối tất cả các nhánh và tôi đã đẩy chúng đến máy chủ:
sinoohe

10
kiểm tra git -b testbranch; git đẩy nguồn gốc testbranch: master
sinoohe

101
git show-refcho thấy chi nhánh của tôi; công git push origin HEAD:<branch>việc cho tôi
Glen Solsberry

5
Bạn vừa cứu tôi Vi. Cảm ơn bạn đã git push origin HEAD:master. Nhưng tại sao một cái gì đó như git push --force origin masterkhông hoạt động?
shkschneider

4
@ gms8994 - bạn đã đúng. nếu ai đó tạo một nhánh như một điều đầu tiên thay vì đẩy vào chủ, thì unfriendlylỗi tương tự sẽ xuất hiện. sử dụng git push origin <branch>thay vì mastertrong trường hợp bạn cố gắng git checkout -b <branch>trước bất kỳ lần đẩy FIRST nào sau lần đầu tiêngit remote add origin <url>
chờ

225

Tôi cũng gặp một lỗi tương tự sau khi xóa tất cả các tệp trên máy tính cục bộ của mình và tôi phải dọn sạch tất cả các tệp trong kho lưu trữ.

Thông báo lỗi của tôi là một cái gì đó như thế này:

error: src refspec master does not match any.
error: failed to push some refs to 'git@github ... .git'

Và nó đã được giải quyết bằng cách thực hiện các lệnh sau:

touch README
git add README

git add (all other files)
git commit -m 'reinitialized files'
git push origin master --force  # <- caution, --force can delete others work.

10
Các câu trả lời khác không giải quyết được vấn đề tôi gặp phải (ví dụ, tôi đã cam kết và vẫn có lỗi này), nhưng git push origin BRANCH --forceđã làm việc. Cảm ơn bạn!
Lemmings19

Xem câu trả lời trước đó . Tôi nghi ngờ rằng bạn cần thêm một tệp vì git sẽ không theo dõi các thư mục trống.

3
lực đẩy cũng có thể thổi bay hoàn toàn công việc khó khăn của đồng nghiệp. Thêm cảnh báo bởi nó.
Michael Durrant

3
Điều này đã giải quyết vấn đề của tôi. Tôi nghĩ rằng git add đã làm điều đó. Trong khi đẩy mọi thứ vào lúc đầu, git không nhận ra mọi thứ, có thể đó là lý do tại sao tôi gặp vấn đề. lệnh git add đã giải quyết vấn đề của tôi. cũng sau đó tôi đã có thể đẩy mà không cần - lực lượng. Cảm ơn Aryo
Anandaraja_Srinivasan

203
  1. Những thay đổi của tôi đã được cam kết
  2. Lực đẩy vẫn cho tôi lỗi tương tự.

Vì vậy, tôi đã thử giải pháp của Vi :

git push origin HEAD:<remoteBranch> 

Điều này làm việc cho tôi.


19
Cuối cùng tôi phát hiện ra rằng đó là do tôi viết sai tên chi nhánh. Tôi đã đẩy thành công nhánh A thành một nhánh có tên B git push origin HEAD:B, nhưng tôi vẫn gặp lỗi tương tự mỗi lần tôi đẩy git push originvào nhánh A.
Yi H.

1
@YiHuang, ugh cảm ơn, tôi đã kiểm tra tên chi nhánh của mình trước đó và sau đó tôi đã kiểm tra lại vì nhận xét của bạn - có cùng một vấn đề, đã viết sai nó.
lakesare

1
@ YiH.i đã chắc chắn rằng tên chi nhánh của tôi là chính xác nhưng tôi chỉ kiểm tra lại sau khi đọc bình luận của bạn và cái xấu của tôi - có cùng một vấn đề.
Con trỏ Null

125
git push -u origin master
error: src refspec master does not match any.

Cho rằng bạn cần nhập thông điệp cam kết như sau và sau đó đẩy mã:

git commit -m "initial commit"

git push origin master

Đẩy thành công thành thạo.


Tôi đã kiểm tra nó hoạt động. Vui lòng bỏ qua tùy chọn -u và sau đó thử
VIKAS KOHLI

Vấn đề ở đây dường như hoàn toàn khác so với OP ... nhưng dường như nhiều người trong đó có tôi gặp phải vấn đề này.
ZX9

110

Đối với tôi, tôi phải đảm bảo khóa công khai được cấu hình đúng trên máy chủ (được thêm vào ~ / .ssh / ủy quyền) và trong GitHub / Bitbucket (được thêm vào khóa SSH của tôi trên GitHub hoặc Bitbucket) - chúng cần khớp.

Sau đó:

git add --all :/

git commit -am 'message'

git push -u origin master

Nó làm việc cho tôi cuối cùng.


88

Tôi thấy điều này xảy ra trong một kho lưu trữ hoàn toàn mới sau khi tôi chỉ thêm một thư mục.

Ngay sau khi tôi thêm một tệp (ví dụ README), Git đẩy đã hoạt động rất tốt.


6
Điều này có thể hoạt động vì git không thực sự theo dõi các thư mục, chỉ các tệp. Vì vậy, nếu một thư mục trống, git sẽ không thực sự thêm nó.

1
OP đã thêm một tệp (xx.php) vì vậy đây không phải là vấn đề trong trường hợp này mặc dù trong các trường hợp khác, đây có thể là một vấn đề và thêm một tệp giải pháp cho vấn đề đó .
Michael Durrant

1
Như một giải pháp đơn giản cho một vấn đề bực bội. Tôi đã thử nghiệm việc tạo và sao chép các repos và tạo các thư mục trống không phải các tệp.
James Wierzba

1
8 năm sau điều này đã cứu tôi một số đau đầu!
rvictordelta

Trong trường hợp của tôi, 1 -> git init 2 ---> git add origin .... etc 3 ---> git git push -u origin master ===> Sau đó, tôi đã gặp lỗi trên. ===> Sau đó, tôi thực hiện theo 2 lệnh, nó biến mất. ---> git add * ---> git commit -m "Một số tin nhắn" ---> git git push -u origin master ===> Làm việc tốt với tôi, trong trường hợp của tôi.
Rao

67

Thiếu hoặc bỏ qua git add .hoặc git commitcó thể gây ra lỗi này:

git push -u origin master
Username for 'https://github.com': yourusername
Password for 'https://yourusername@github.com': 
error: src refspec master does not match any.
error: failed to push some refs to 'https://github.com/yourusername/foobar.git'

Để khắc phục, hãy khởi tạo lại và thực hiện theo trình tự thích hợp:

git init
git add .
git commit -m 'message'
git *create remote
git push -u origin master

điều đó là chính xác, kết thúc kinh doanh cụ thể hơn git remote add __REMOTE_NAME__ __URL_OR_SSH__, và phía trên tên từ xa là "nguồn gốc"
aug2uag

1
Họ đã thêm và cam kết trong câu hỏi của họ vì vậy đó không phải là vấn đề mặc dù điều này giúp ích cho người khác.
Michael Durrant

Câu trả lời này đã làm việc tuy nhiên vì -utùy chọn đã được sử dụng ở đây.
Michael Durrant

63

Để khắc phục, hãy khởi tạo lại và thực hiện theo trình tự mã thích hợp:

git init
git add .
git commit -m 'message'
git push -u origin master

55

Hãy chắc chắn rằng bạn đã thêm trước, sau đó cam kết / đẩy:

Giống:

git init
git add .
git commit -m "message"
git remote add origin "github.com/your_repo.git"
git push -u origin master

43

Điều này cũng xảy ra khi bạn ở trong một chi nhánh cụ thể và cố gắng đẩy một chi nhánh khác chưa tồn tại, như:

$ git branch
* version-x  # you are in this branch
  version-y

$ git push -u origin master
error: src refspec master does not match any.
error: failed to push some refs to 'origin_address'

3
CƯỜI LỚN. Tôi đã cố gắng để trở thành chủ bản gốc nhưng chi nhánh đó không tồn tại. Nó được gọi là nguồn gốc ổn định.
Penner

1
-uthể đã giúp ở đây.
Michael Durrant

1
Trong trường hợp trên, vấn đề tất nhiên là không có chi nhánh địa phương master, vì vậy bạn không thể đẩy nó. Bạn có thể muốn đẩy một nhánh hiện có - hoặc tạo nhánh chính và sau đó đẩy nó, như thế này:git checkout -b master; git push -u origin master;
tanius

4
Tôi chỉ nhận được điều này khi tôi viết sai tên chi nhánh.
Sebastian rleryd

2
Chi nhánh địa phương của tôi được đánh vần là "s h eduler" và tôi đang làm git push origin scheduler. HẠ! Một chữ cái tắt sẽ giết bạn trong lập trình. lol
protoEveachion 17/07/17

43

Tôi đã đối mặt với cùng một vấn đề và tôi đã sử dụng --allow-empty:

$ git commit -m "initial commit" --allow-empty
...
$ git push
...

Phần bổ sung

Một trong những lý do chính của vấn đề này là một số máy chủ Git, chẳng hạn như BitBucket, không được masterkhởi tạo chi nhánh khi kho lưu trữ mới được sao chép.


35

Đối với tôi, sau đây đã làm việc để di chuyển các tệp không bị theo dõi:

git add --all

Tiếp theo, tôi làm theo các bước tương tự

 git commit -m "First commit"

Sau đó,

git remote add origin git@github.....

Cuối cùng nhưng không kém phần:

git push -u origin master

Khi bạn làm điều này, bảo mật Windows sẽ bật lên hỏi tên người dùng và mật khẩu của bạn.


1
ý bạn là 'git add --all` với hai dấu gạch ngang
Abdallah Abdillah

29

Trong trường hợp của tôi, tôi quên bao gồm các .gitignoretập tin. Dưới đây là tất cả các bước cần thiết:

  1. Tạo một kho Git trống trên remote,
  2. Trên cục bộ tạo tệp .gitignore cho dự án của bạn. GitHub cung cấp cho bạn một danh sách các ví dụ ở đây
  3. Khởi chạy một thiết bị đầu cuối và trong dự án của bạn thực hiện các lệnh sau:

    git remote add origin YOUR/ORIGIN.git
    
    git add .
    
    git commit -m "initial commit or whatever message for first commit"
    
    git push -u origin master
    

Làm thế nào đây là lỗi trong câu hỏi liên quan đến .gitignore?! Nếu nó có liên quan (mà tôi rất nghi ngờ), bạn nên giải thích nó trong câu trả lời của bạn. Cảm ơn
pedram bashiri

26

Chỉ cần thêm một cam kết ban đầu. Thực hiện theo các bước sau:

  • git add .

  • git commit -m "initial commit"

  • git push origin master

Điều này làm việc cho tôi.


24

Vấn đề của tôi là chi nhánh 'chủ nhân' chưa được tạo tại địa phương.

Nhanh lên

git checkout -b "master"

đã tạo ra nhánh chủ, tại điểm đó, nhanh chóng

git push -u origin master

đẩy công việc lên kho Git.


22

Có lẽ bạn đã quên lệnh "git add." sau lệnh "git init".


Thêm git commit với tất nhiên ...
Bill

20

Tôi cũng đã làm theo chỉ dẫn của GitHub như sau, nhưng tôi vẫn gặp phải lỗi tương tự như được đề cập bởi OP:

git init
git add .
git commit -m "message"
git remote add origin "github.com/your_repo.git"
git push -u origin master

Đối với tôi và tôi hy vọng điều này sẽ giúp một số người, tôi đã đẩy một tệp lớn (1.58 GB on disk)trên MacOS của mình. Trong khi sao chép dán dòng mã được đề xuất ở trên, tôi đã không chờ bộ xử lý của mình thực sự kết thúc add .quá trình. Vì vậy, khi tôi gõ git commit -m "message", về cơ bản nó không tham chiếu bất kỳ tệp nào và chưa hoàn thành bất cứ điều gì cần làm để cam kết thành công mã của tôi với GitHub.

Bằng chứng về điều này là khi tôi gõ git statusthường tôi nhận được phông chữ màu xanh lục cho các tệp được thêm vào. Nhưng mọi thứ đều màu đỏ. Như thể nó không được thêm vào.

Vì vậy, tôi làm lại các bước. Tôi gõ git add .và đợi các tập tin kết thúc được thêm vào. Sau đó tôi làm theo các bước tiếp theo.


19

Điều này chỉ có nghĩa là bạn quên thực hiện cam kết ban đầu, hãy thử

git add .
git commit -m 'initial commit'
git push origin master

vui lòng viết git commit -m "cam kết ban đầu"
Yash Agrawal

19
  1. Đầu tiên, git add .
  2. Thứ hai, git commit -m "message"
  3. Ngày thứ ba, git push origin branch

Vui lòng kiểm tra lỗi chính tả vì điều đó cũng có thể gây ra lỗi đó.


18

Tôi đã có cùng một vấn đề khi tôi bỏ lỡ để chạy:

git add .

(Bạn phải có ít nhất một tệp, nếu không bạn sẽ lại gặp lỗi.)


18

Nó xảy ra nếu bạn quên cam kết trước khi đẩy lần đầu tiên. Chỉ cần chạy:

git commit -m "first commit"

17

Để kiểm tra tình trạng hiện tại , git status.

Và làm theo các bước sau là tốt:

git init
git add .
git commit -m "message"
git remote add origin "github.com/your_repo.git"
git push -u origin master

16

Điều này xảy ra khi bạn đã thêm tệp của mình, quên cam kết và đẩy. Vì vậy, cam kết các tập tin và sau đó đẩy.


14

Tôi đã từng gặp vấn đề tương tự. Tôi đã làm điều đó bằng các bước sau:

1. git commit -m 'message'
2. git config --global user.email "your mail"
3. git config --global user.name "name"
4. git commit -m 'message'
5. git push -u origin master

14

Nếu bạn gặp lỗi này khi làm việc ở chế độ CHÍNH, bạn có thể thực hiện việc này:

git push origin HEAD:remote-branch-name

Xem thêm: Tạo lực đẩy Git từ đầu tách ra

Nếu bạn ở một chi nhánh địa phương khác với chi nhánh từ xa, bạn có thể làm điều này:

git push origin local-branch-name:remote-branch-name

13

Trong trường hợp bạn kiểm tra mã từ kho lưu trữ bên ngoài (GitHub) và muốn nhập mã đó vào hệ thống cá nhân / nội bộ, lệnh này thực sự tỏa sáng:

git push --all origin

Điều này đẩy tất cả các chi nhánh địa phương đến điều khiển từ xa, mà không cần kiểm tra ref và không khăng khăng cam kết.


12

Điều này cũng sẽ xảy ra nếu bạn có một lỗi đánh máy trong tên chi nhánh bạn đang cố gắng đẩy.


2
Tôi nghi ngờ rất nhiều người trong chúng ta đến đây thông qua tìm kiếm trên web thực sự đã nhầm tên!
hiền nhân

12
git add .

là tất cả những gì bạn cần. Mã đó theo dõi tất cả các tập tin chưa được theo dõi trong thư mục của bạn.


10

Trong trường hợp nếu bạn đang phải đối mặt với vấn đề này ngay cả sau khi thực hiện git initvà đẩy cam kết ban đầu của bạn. Sau đó, bạn có thể thử như sau,

git checkout -b "new branch name"
git push origin "new branch name"

Mã của bạn sẽ được đẩy như 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.