Những gì mà Git Git đẩy các bản cập nhật không chuyển tiếp nhanh bị từ chối là gì?


153

Tôi đang sử dụng Git để quản lý hai máy tính và sự phát triển của tôi. Tôi đang cố gắng thực hiện các thay đổi đối với GitHub và tôi đang gặp lỗi.

Không thể đẩy một số ref đến <repo>. Để ngăn bạn khỏi mất lịch sử, các cập nhật không chuyển tiếp đã bị từ chối. Hợp nhất các thay đổi từ xa trước khi đẩy lại.

Điều gì có thể gây ra điều này và làm thế nào tôi có thể khắc phục điều này?

BIÊN TẬP:

Kéo repo trả về như sau:

* master master-> master (không chuyển tiếp nhanh) Đã cập nhật

Đẩy vẫn cho tôi lỗi đã nói ở trên.


Câu trả lời:


136

GitHub có một phần hay gọi là " Xử lý các lỗi không chuyển tiếp nhanh chóng "

Lỗi này có thể là một chút áp đảo lúc đầu, đừng sợ.
Nói một cách đơn giản, git không thể thực hiện thay đổi trên điều khiển từ xa mà không mất các cam kết, vì vậy nó từ chối việc đẩy .
Thông thường, điều này được gây ra bởi 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à hợp nhất nhánh từ xa hoặc sử dụng pull để 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 mang tính hủy diệt được thực hiện cục bộ bằng cách sử dụng các lệnh như git commit --amendhoặc git rebase.
Mặc dù bạn có thể ghi đè từ xa bằng cách thêm --forcevào pushlệnh, bạn chỉ nên làm như vậy nếu bạn hoàn toàn chắc chắn đây là điều 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ải xuống chi nhánh từ xa và bị coi là hành vi xấu. Khi nghi ngờ, đừng ép buộc .


Git không thể thực hiện các thay đổi trên điều khiển từ xa như hợp nhất chuyển tiếp nhanh, mà Tham chiếu Visual Git minh họa như:

văn bản thay thế

Đây không phải trường hợp chính xác của bạn, nhưng giúp xem "chuyển tiếp nhanh" là gì (trong đó HEADchi nhánh đơn giản được chuyển sang một cam kết mới gần đây hơn).


" branch master->master (non-fast-forward) Already-up-to-date" Thường dành cho các chi nhánh địa phương không theo dõi bộ phận từ xa của họ.
Ví dụ, xem câu hỏi SO này " git pull nói cập nhật nhưng git đẩy từ chối không chuyển tiếp nhanh ".
Hoặc hai chi nhánh được kết nối, nhưng không đồng ý với lịch sử tương ứng của họ:
Xem " Câu chuyện GIT không bao giờ kết thúc - tôi đang làm gì sai ở đây? "

Điều này có nghĩa là nhánh lật đổ của bạn và nhánh git master từ xa của bạn không đồng ý về điều gì đó.
Một số thay đổi đã được đẩy / cam kết với cái không phải là cái khác.
Hãy bùng cháy gitk --all, và nó sẽ cho bạn manh mối về những gì đã sai - hãy tìm "dĩa" trong lịch sử.


53

Điều đó có nghĩa là đã có các cam kết khác được đẩy đến kho lưu trữ từ xa khác với các cam kết của bạn. Bạn thường có thể giải quyết điều này với một

git pull

trước khi bạn đẩy

Cuối cùng, "chuyển tiếp nhanh" có nghĩa là các cam kết có thể được áp dụng trực tiếp trên ngọn cây làm việc mà không yêu cầu hợp nhất.


2
Đây là những gì làm việc cho tôi! Tôi quên tôi đã thay đổi readme.md trên trang web kho lưu trữ!
ryanwinchester

14

Một bản cập nhật chuyển tiếp nhanh là nơi chỉ thay đổi một mặt sau lần cam kết gần đây nhất ở phía bên kia, do đó không cần phải có bất kỳ sự hợp nhất nào. Điều này nói rằng bạn cần hợp nhất các thay đổi của mình trước khi bạn có thể thúc đẩy.


8

bạn có thể muốn sử dụng vũ lực với hoạt động đẩy trong trường hợp này

git đẩy nguồn gốc - lực lượng


1
Nó sai. tổng nguồn github sẽ bị xóa và chỉ đẩy bạn là nguồn cũ mới bị xóa
logeshpalani98

6

Không bao giờ làm một git -fviệc phải làm pushvì nó có thể dẫn đến hậu quả tai hại sau này.

Bạn chỉ cần làm một git pullchi nhánh địa phương của bạn.

Ví dụ:

git pull origin 'your_local_branch'

và sau đó làm một git push


0

Bạn cần hợp nhất và giải quyết conflicts locallytrước khi bạn thay đổi các repo / fork từ xa.

1) kéo (tìm nạp và hợp nhất)

$ git pull remote branch 

2) Đẩy các thay đổi

$ git push remote branch 

Tuy nhiên, bạn vẫn có một lựa chọn nhanh chóng pushbằng cách sử dụng --forcetùy chọn nhưng nên tránh vì nó có thể dẫn đến mất thay đổi hoặc ảnh hưởng xấu đến những người đóng góp khác.

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.