lỗi git: không thể đẩy một số ref đến điều khiển từ xa


448

Vì một số lý do, tôi không thể thúc đẩy ngay bây giờ, trong khi tôi có thể làm điều đó ngày hôm qua. Có lẽ tôi đã nhầm lẫn với cấu hình hoặc một cái gì đó.

Đây là những gì sẽ xảy ra:

Khi tôi sử dụng git đẩy gốc master

gitbashscr

Thư mục làm việc và kho lưu trữ từ xa của tôi trông như thế nào:

Ảnh chụp màn hình của thư mục tệp Windows với các thư mục này: .git, css, js.  Và các tệp này: index.php, readme, setsu.php.  Từ "cục bộ" với một mũi tên chỉ vào thư mục css.  Dưới đây, ảnh chụp màn hình với tiêu đề "github", và một thư mục css và tệp index.php


7
có vẻ như repo cục bộ của bạn không đồng bộ với repo git. bạn đã thử làm git kéo?
R11G

1
có, nhưng tôi không biết cú pháp nào sau khi git pull nó nói git pull <remote> <Branch>, bạn có thể cho tôi xem một cú pháp ví dụ cho git pull không?
leipzy

1
Hãy kiểm tra câu hỏi tương tự này - stackoverflow.com/questions/18588974/ từ
R11G

3
@ R11G cảm ơn ngài! liên kết này đã giúp tôi stackoverflow.com/a/18589043/3626672
leipzy

2
Tôi đã nhận được lỗi đó trên một repo mới. Điều này đã giúp: stackoverflow.com/a/6518774/2067690
HumanInDisguise

Câu trả lời:


618

Nếu repo GitHub đã thấy các cam kết mới được đẩy vào nó, trong khi bạn đang làm việc tại địa phương, tôi sẽ khuyên bạn nên sử dụng:

git pull --rebase
git push

Cú pháp đầy đủ là:

git pull --rebase origin master
git push origin master

Với Git 2.6+ (tháng 9 năm 2015), sau khi thực hiện (một lần)

git config --global pull.rebase true
git config --global rebase.autoStash true

Một đơn giản git pullsẽ là đủ.
(Lưu ý: với Git 2.27 quý 2 năm 2020 , a merge.autostashcũng có sẵn cho lần kéo thông thường của bạn mà không cần rebase)

Bằng cách đó, bạn sẽ phát lại (các --rebasephần) địa phương cam kết của bạn trên đầu trang của các mới được cập nhật origin/master(hoặc origin/yourBranch: git pull origin yourBranch).

Xem một ví dụ đầy đủ hơn trong chương 6 Kéo với rebase của Git Pocket Book .

Tôi muốn giới thiệu một:

# add and commit first
git push -u origin master

Điều đó sẽ thiết lập mối quan hệ theo dõi giữa nhánh chính địa phương của bạn và nhánh ngược dòng của nó.
Sau đó, bất kỳ sự thúc đẩy nào trong tương lai cho chi nhánh đó đều có thể được thực hiện với một cách đơn giản:

git push

Xem " Tại sao tôi cần phải đẩy một chi nhánh mới một cách rõ ràng? ".


Vì OP đã thiết lập lại và thực hiện lại cam kết của mình trên đầu trang origin/master:

git reset --mixed origin/master
git add .
git commit -m "This is a new commit for what I originally planned to be amended"
git push origin master

Không cần thiết pull --rebase.

Lưu ý: git reset --mixed origin/mastercũng có thể được viết git reset origin/master, vì --mixedtùy chọn là mặc định khi sử dụng git reset.


Bạn có thể thực hiện lệnh kéo git được đề xuất của mình - không? Vì tôi đã thực hiện> git reset - nguồn gốc hỗn hợp / master> git add. > git commit -m "Đây là một cam kết mới cho những gì tôi dự định ban đầu là một sửa đổi"> git đẩy nguồn gốc được đề xuất ở đây stackoverflow.com/questions/18588974/
đấm

3
Đối với tôi, tôi chỉ cần chạy "git commit". :(
Tyler

Cảm ơn, đã khắc phục sự cố ngu ngốc với Git LFS, tôi đã đầu hàng khi phải sử dụng dòng lệnh từ bây giờ vì vậy haha.
Tyler C

2
Thực sự siêu .. các lệnh dưới đây đã làm việc cho tôi ... git reset - trộn lẫn nguồn gốc / master git add. git commit -m "Đây là cam kết mới cho những gì tôi dự kiến ban đầu để được sửa đổi" bậc thầy đẩy nguồn gốc git Cảm ơn bạn @VonC
Hari Narayanan

1
Cảm ơn nó hoạt động! Tôi đã tìm kiếm hàng giờ cho giải pháp này!
Redion Xhepa

95

Có ai thử chưa:

git push -f origin master

Điều đó sẽ giải quyết vấn đề.

EDIT: Dựa trên nhận xét của @Mehdi bên dưới, tôi cần làm rõ điều gì đó về —force pushing. Lệnh git ở trên chỉ hoạt động an toàn cho lần xác nhận đầu tiên. Nếu đã có các cam kết, hãy kéo các yêu cầu hoặc các nhánh trước đó, điều này sẽ đặt lại tất cả và đặt nó từ 0. Nếu vậy, vui lòng tham khảo câu trả lời chi tiết của @VonC để có giải pháp tốt hơn.


25
Hoạt động nhưng không tốt, xin vui lòng không sử dụng nó trừ khi bạn biết những gì bạn đang làm. (có lẽ bạn không biết bạn đang làm gì nếu bạn đang tìm kiếm trong SO)
Mehdi

3
Thay vào đó, nếu bạn đang cố gắng -f/ --forcenó luôn an toàn hơn để sử dụng --force-with-leasethay vào đó, nó sẽ hủy bỏ nếu có những thay đổi xuôi dòng sẽ bị chặn lại bởi cú đẩy. --force-with-leaselà cần thiết cho rất nhiều tình huống nổi loạn hàng ngày, nhưng --forcehầu như không bao giờ cần thiết.
Joshua Goldberg

63

Nếu bạn vừa sử dụng git initvà đã thêm các tệp của mình với git add .hoặc một cái gì đó tương tự và đã thêm chi nhánh từ xa của bạn thì có thể là bạn đã không cam kết ( git commit -m 'commit message') bất cứ điều gì cục bộ để đẩy vào điều khiển từ xa ... Tôi chỉ gặp lỗi này và đó là lỗi của tôi vấn đề.


1
chỉ cần chạy vào đây Lệnh Commit không hoạt động trong quá trình thêm git. cuộc gọi tốt Cảm ơn
viết

1
Cảm ơn người đàn ông! Đó là nó. Tôi nghĩ rằng tôi đã cam kết thay đổi của tôi. Bây giờ git đẩy -u chủ gốc hoạt động tốt.
tleo

36

Tôi đã có vấn đề tương tự. Tôi đã gặp vấn đề này bởi vì tôi đã không thực hiện bất kỳ cam kết nào ngay cả cam kết ban đầu và tôi vẫn đang cố gắng thúc đẩy.

Một khi tôi đã làm git commit -m "your msg"và sau đó mọi thứ hoạt động tốt.


8
Điều đó không có ý nghĩa nhiều. Câu hỏi ban đầu là về git địa phương đằng sau . Không có cách nào "đứng sau" có thể được giải quyết khi tôi thực hiện một cam kết địa phương!
GhostCat

Ồ tôi cũng quên cam kết: p
Shams Nahid

Điều này cũng có thể nó sẽ không cho phép bạn thúc đẩy với một cam kết trống rỗng
mboy

3
Tôi chỉ có vấn đề này và tôi quên cam kết. Thông báo lỗi nên rõ ràng hơn
Ivan Topić

1
Nó áp dụng cho tôi vì tôi đã nhận được thông báo lỗi chính xác đó và giải pháp này đã khắc phục vấn đề của tôi.
Pháo đài Diego

19

Đổi tên chi nhánh của bạn và sau đó đẩy, ví dụ:

git branch -m new-name
git push -u new-name

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


1
nó đã hoạt động, nhưng vui lòng giải thích lý do tại sao chúng ta nên làm điều đó
kanlukasz

Wow, điều này thực sự đã làm việc, nhưng tại sao? Tôi đã có một dấu gạch nối trong tên chi nhánh địa phương của tôi : my-branch_wont_push. Khi tôi đổi tên thành my_branch_wont_push, sau đó git push -u origin my_branch_wont_pushlàm việc cho tôi.
cdabel

13

Tôi tìm giải pháp cho vấn đề này trong trợ giúp của github.

Bạn có thể thấy nó từ: Xử lý các lỗi không chuyển tiếp nhanh

Nó nói rằng:

Bạn có thể khắc phục điều này bằng cách tìm nạp và hợp nhất các thay đổi được thực hiện trên nhánh từ xa với các thay đổi mà bạn đã thực hiện cục bộ:

$ git fetch origin
# Fetches updates made to an online repository
$ git merge origin branch
# Merges updates made online with your local work

Hoặc, bạn có thể chỉ cần sử dụng git pull để thực hiện cả hai lệnh cùng một lúc:

$ git pull origin branch
# Grabs online updates and merges them with your local work

1
Đây là quá trình bình thường bất cứ khi nào mọi thứ đang làm việc như mong đợi. Nó không giúp được gì khi git nghĩ rằng nó đã được cập nhật như @rubyandcoffee yêu cầu.
Tim

10
  1. git init

  2. git remote add origin https://gitlab.com/crew-chief-systems/bot

  3. git remote -v (để kiểm tra kho lưu trữ hiện tại)

  4. git add -A(thêm tất cả các tệp)

  5. git commit -m 'Added my project'

  6. git pull --rebase origin master

  7. git push origin master


trước khi đẩy mã bạn cần lấy từ kho lưu trữ
James Siva

bạn có thể chỉ cần viết như git pull - masterbase origin
James Siva

6

Tôi đã phải đối mặt với cùng một vấn đề, cố định với các bước dưới đây.

  1. git init
  2. git add .
  3. git commit -m 'Add your commit message'
  4. git remote add origin https://User_name@bitbucket.org/User_name/sample.git

    (Url trên https: //User_name@bitbucket.org/User_name/sample.git đề cập đến url dự án xô bit của bạn)

  5. git push -u origin master

dấu

kiểm tra xem liên kết tài khoản trung tâm git của bạn với git cục bộ của bạn bằng cách sử dụng:

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

4

Nếu bạn đang sử dụng gerrit, điều này có thể do một Thay đổi id không phù hợp trong cam kết. Hãy thử xóa Id thay đổi và xem điều gì sẽ xảy ra.


4

Hãy nhớ cam kết thay đổi của bạn trước khi đẩy vào repo Github. Điều này có thể khắc phục vấn đề của bạn.


4

Không cam kết thay đổi ban đầu trước khi đẩy cũng gây ra vấn đề


3

trước khi đẩy bạn phải thêm và cam kết thay đổi hoặc làm git push -f origin master


3
git push origin {your_local_branch}:{your_remote_branch}

Nếu chi nhánh địa phương và chi nhánh từ xa của bạn chia sẻ cùng tên, thì bạn có thể bỏ qua tên chi nhánh địa phương của mình không, chỉ cần sử dụng git push {your_remote_branch}. Nếu không nó sẽ ném lỗi này.


3

Tôi đã làm theo các bước sau và nó làm việc cho tôi.

 rm -rf .git
 git init
 git add .
 git commit -m"first message"
 git remote add origin "LINK"
 git push -u origin master

2

Nó có thể xảy ra khi bạn không có bất kỳ tập tin nào. Cố gắng tạo một tệp văn bản sau đó làm theo các lệnh sau

git add .
git commit -m "first commit"
git push --set-upstream origin master

2

Đối với tôi Vấn đề là, tôi đã không thêm các tập tin trước khi cam kết.

git add .

git commit -m "your msg"


2

Sử dụng tốt nhất rm -rf .git/hooksvà sau đó thử git đẩy


Thật thú vị, nó đã giúp tôi trong một trường hợp, nơi rõ ràng không có cam kết về nguồn gốc (không cần phải nổi loạn).
pevik

Tại sao bạn lại tung ra tất cả các móc của bạn? có thể tạo một bản sao lưu đầu tiên?
MSpreij

2

Tôi đã tạo một repo trống trong GitHub và có mã của tôi cục bộ. Bây giờ tôi đã đối mặt với cùng một vấn đề, khi tôi làm theo trình tự dưới đây,

git init
git commit -m 'Initial Commit'
git remote add origin https://github.com/kavinraju/Repo-Name.git
git add .
git push -u origin master

VẤN ĐỀ: Tôi đã cố gắng cam kết trước khi dàn dựng các tập tin tôi có.

VÌ CHÚNG TÔI CẦN GIAI ĐOẠN CÁC PHIM VÀ THAM GIA.

Đây là trình tự chính xác.

git init
git add .
git commit -m 'Initial Commit'
git remote add origin https://github.com/kavinraju/Repo-Name.git
git push -u origin master

Vì tôi thực hiện chuỗi sai trước tiên, tôi chỉ thực hiện các lệnh bên dưới

git add .
git commit -m 'Initial Commit'
git push -u origin master

1

Không chắc chắn nếu điều này áp dụng, nhưng cách khắc phục đối với tôi là cam kết một cái gì đó cục bộ sau git init. Sau đó, tôi đẩy sang điều khiển từ xa bằng cách sử dụng --set-upflow ...


1

Tạo một nhánh mới đã giải quyết cho tôi:

git checkout -b <nameOfNewBranch>

Như mong đợi, không cần phải hợp nhất vì chi nhánh trước đó được chứa đầy đủ trong chi nhánh mới.


1
Tôi đã có vấn đề này chính xác, tôi đã sử dụng tính năng22 và đang thực hiện git push origin feature22-fix, nhưng feature22-fixkhông thoát khỏi địa phương cũng không phải từ xa, vì vậy trước tiên tôi phải kiểm tra chi nhánh tại địa phương, sau đó đẩy
Honey

1

Nếu bạn đang cố gắng khởi tạo một thư mục với kho lưu trữ GitHub hiện có, bạn nên đảm bảo rằng bạn đang cam kết thay đổi.

Hãy thử tạo một tệp:

touch initial
git add initial
git commit -m "initial commit"
git push -u origin master

Điều đó sẽ đặt một tập tin có tên ban đầu mà bạn có thể xóa sau đó.

Hy vọng câu trả lời này sẽ giúp! Chúc may mắn!


1

Bạn cần phải cung cấp một số lực lượng

Chỉ cần đẩy - lực lượng.


1

Trong trường hợp của tôi, đó là huskygói của tôi không cho phép đẩy.

> husky - pre-push hook failed (add --no-verify to bypass)
> husky - to debug, use 'npm run prepush'
error: failed to push some refs to 'https://username@bitbucket.org/username/my-api.git'

Để đẩy nó mạnh mẽ, chỉ cần chạy git push origin master --no-verify

Tôi đã chạy npm run prepushđể xem lỗi gỡ lỗi và đây là nguyên nhân:

npm ERR! code ELOCKVERIFY
npm ERR! Errors were found in your npm-shrinkwrap.json, run  npm install  to fix them.
npm ERR!     Invalid: lock file's loopback-utils@0.8.3 does not satisfy loopback-utils@^0.9.0

Ran npm installvà cam kết nó, và vấn đề được khắc phục.


1

làm những điều này

git rm --cached *
git add .
git commit -m"upload"
git push --set-upstream origin master

Chúc mừng mã hóa!


1

Hãy thử lệnh git này,

git push origin master –f
git push origin master --force

0

Vâng, nếu không có câu trả lời nào ở trên đang hoạt động và nếu bạn đã làm hỏng điều gì đó ssh-addgần đây. Thử

ssh-add -D

0

Dành cho người dùng sourcetree

Trước tiên, hãy thực hiện một cam kết ban đầu hoặc đảm bảo rằng bạn không có thay đổi nào không được cam kết, sau đó ở bên cạnh sourcetree có một "NHỚ", nhấp chuột phải vào nó và sau đó nhấp vào 'Đẩy để xuất xứ'. Có bạn đi.


0

Điều này xảy ra với tôi khi tôi có một thẻ có cùng chi nhánh và tôi đã cố gắng đẩy chi nhánh đến điều khiển từ xa.


0

Trong trường hợp của tôi, vấn đề là (lạ lùng) không có chi nhánh nào được gọi là chủ. Tôi lấy kho lưu trữ từ Github.


0

Tôi đã đẩy chi nhánh 'evelop' hiện tại mà tôi chưa có kiểm tra, và thay vào đó, tôi muốn đẩy một chi nhánh gọi là 'phong bì'. Vì vậy, chi nhánh phải tồn tại / kiểm tra tại bản sao làm việc tại địa phương để đẩy tất nhiên, do đó, không phải là một lỗi đánh máy.

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.