2010-08-30 42 views
13

git push origin master cho thấy một lỗiTôi không thể đẩy git?

thất bại trong việc thúc đẩy một số refs để '[email protected]:xyz/abc.git' Để ngăn chặn bạn khỏi mất lịch sử, cập nhật phi nhanh về phía trước đã bị từ chối Merge những thay đổi từ xa trước khi đẩy một lần nữa. Xem phần 'Lưu ý về chuyển tiếp nhanh' của 'git push --help' để biết chi tiết.

Đây là gì? Làm thế nào để phục hồi này?

+2

Bạn có "thấy 'Lưu ý về nhanh về phía trước' của 'push --help git' để biết chi tiết"? Đó là một chút quá dài để tái sản xuất ở đây, nhưng nó mô tả các vấn đề chính xác, cùng với sơ đồ ascii-nghệ thuật –

Trả lời

28

Xem "pushing a branch" section from GitHub help page:

Đối phó với “phi nhanh về phía trước” lỗi

Từ bất cứ lúc nào bạn có thể gặp lỗi này trong khi đẩy:

$ git push origin master 
To ../remote/ 
! [rejected]  master -> master (non-fast forward) 
error: failed to push some refs to '../remote/' 
To prevent you from losing history, non-fast-forward updates were rejected 
Merge the remote changes before pushing again. See the 'non-fast forward' 
section of 'git push --help' for details. 

Lỗi này có thể hơi lấn át lúc đầu, d o không sợ hãi.
Đơn giản chỉ cần đặt, git không thể thực hiện thay đổi trên điều khiển từ xa mà không bị mất cam kết, vì vậy nó từ chối đẩy. Thông thường, điều này là do một người dùng khác đẩy đến cùng một chi nhánh.
Bạn có thể khắc phục điều này bằng cách tìm nạp và kết hợp nhánh từ xa hoặc sử dụng kéo để thực hiện cả hai cùng một lúc.

Trong các trường hợp khác, lỗi này là kết quả của các thay đổi phá hoại được thực hiện cục bộ bằng cách sử dụng các lệnh như git commit --amend hoặc git rebase.
Trong khi bạn có thể ghi đè điều khiển từ xa bằng cách thêm --force vào lệnh đẩy, bạn chỉ nên làm như vậy nếu bạn hoàn toàn chắc chắn đây là những gì bạn muốn làm. Lực đẩy có thể gây ra sự cố cho những người dùng khác đã tìm nhánh từ xa và được coi là thực hành không tốt. Khi nghi ngờ, đừng ép buộc.


chi tiết Chế độ trên "Note about fast-forwards" of git push, như đã đề cập bởi Michael Mrozek trong các ý kiến.

3

Khá quan trọng: điều này cũng có thể xảy ra nếu tên chi nhánh bạn đang truy cập (và muốn hợp nhất) và nhánh ngược dòng không giống nhau. Sau đó, luồng công việc có thể trông giống như sau:

git pull --rebase    # to retrieve upstream changes, replay yours on top 
git push --dry-run --verbose origin HEAD:master # always good idea: dry-runs.. 
git push origin HEAD:master # actually push current branch head (non-master) to upstream master 
2

Nếu bạn gặp lỗi này và của bạn.git tập tin/config là tốt sau đó đi qua các bước sau (đây là một vấn đề thường gặp với một submodule trong Repos git - một lần nữa làm điều này từ dir submodule)

  1. git checkout chủ
  2. git pull
  3. (merge xảy ra trong nền)
  4. git push
+0

Tôi không quá chắc chắn những gì bạn đang cố gắng để nói ở đây? hãy giải thích rõ ràng hơn. –

+0

Ông đang cố gắng để xem nếu bạn đang cố gắng để đẩy từ một chi nhánh và nhận được tin nhắn từ chối, hãy làm theo các bước và tất cả sẽ được tốt ... Điều này làm việc cho tôi như một champ ... Cảm ơn jclaan ... có nó đã làm hợp nhất trong nền – zee

5

Ngoài câu trả lời VonC của,

trong trường hợp bạn, inte để ghi đè các thay đổi từ xa bằng địa phương của bạn,

$git push --force 

sẽ thực hiện.

+0

Khi câu trả lời của VonC nói "Trong khi bạn có thể ghi đè từ xa bằng cách thêm - force vào lệnh push, bạn chỉ nên làm như vậy nếu bạn hoàn toàn chắc chắn đây là những gì bạn muốn làm." – Intrications

2

Đầu Kéo sau đó đẩy

git pull gốc any_branch_name

0

Tôi có điều này quá và không thể tìm thấy bất cứ nơi nào trên StackOverflow với các nugget hữu ích sau đây nêu rõ: Git sẽ không cho phép bạn đẩy đến một chi nhánh khác nếu nhánh làm việc của bạn đã phân tách khỏi nó. Có một sửa chữa dễ dàng - chỉ cần chuyển sang nhánh bạn muốn đẩy đến và hợp nhất nhánh làm việc của bạn vào đó. Vì vậy, thay vì cố gắng này:

git push origin master <========== On "mybranch" 

Làm điều này:

git checkout master  <========== Switch to the branch you want to push to 
git pull origin master <========== Get latest from remote repository 
git pull origin mybranch <========== Merge in changes from "mybranch" 
======== Resolve any issues ======== 
git push origin master <========== Push the merged changes 
Các vấn đề liên quan