Các cập nhật của Github đã bị từ chối vì điều khiển từ xa chứa công việc mà bạn không có


176

Tôi đã tạo một repo mới, nhân bản nó, thêm các tệp vào thư mục, thêm chúng vào add -A, thay đổi đã cam kết và khi tôi cố gắng sử dụng git push <repo name> mastertôi nhận được "Cập nhật đã bị từ chối vì điều khiển từ xa chứa công việc mà bạn không có".

Điều này dường như không có ý nghĩa vì nó là một repo mới và chỉ chứa một tệp readme.

Câu trả lời:


307

Điều này xảy ra nếu bạn đã khởi tạo một repo github mới với READMEvà / hoặc LICENSEtệp

git remote add origin [//your github url]

//pull those changes

git pull origin master 

// or optionally, 'git pull origin master --allow-unrelated-histories' if you have initialized repo in github and also committed locally

//now, push your work to your new repo

git push origin master

Bây giờ bạn sẽ có thể đẩy kho lưu trữ của bạn lên github. Về cơ bản, bạn phải hợp nhất các tệp khởi tạo mới đó với công việc của bạn. git pulllấy và hợp nhất cho bạn. Bạn cũng có thể tìm nạp và hợp nhất nếu phù hợp với bạn.


7
Tôi đã tạo một video YouTube với lời giải thích chi tiết hơn và hai cách được đề xuất để tránh vấn đề này ngay từ đầu.
Kevin Markham

16
Đối với lệnh hợp nhất tôi cần sử dụnggit pull origin master --allow-unrelated-histories
Luciano Marqueto

Tôi nhận được "chí mạng: từ chối hợp nhất lịch sử không liên quan"
Sergi

4
@Sergi thửgit pull origin master --allow-unrelated-histories
palerdot

101

Lỗi có thể xảy ra do cấu trúc mã khác nhau mà bạn đang cam kết và hiện diện trên GitHub. Nó tạo ra xung đột có thể được giải quyết bằng

git pull

Hợp nhất giải quyết xung đột:

git push

Nếu bạn xác nhận rằng mã mới của bạn hoàn toàn ổn, bạn có thể sử dụng:

git push -f origin master

Trường hợp -fviết tắt của "lực lượng cam kết".


13
'git push -f origin master' - điều này giúp
Saurabh

4
git đẩy -f ghi đè lên lịch sử từ xa với lịch sử địa phương của bạn, hãy cẩn thận khi sử dụng nó. Đặc biệt là trên các kho lưu trữ công cộng.
Andre

updates-were-rejectedcũng xảy ra nếu bạn thực hiện thay đổi trong github repo trong điều khiển từ xa, ví dụ: thực hiện một số thay đổi trong tệp readme bằng github gui. Và sau đó cố gắng đẩy tác phẩm mới của bạn lên github, nó sẽ hiển thị thông báo này nói rằng những thay đổi bạn đã thực hiện từ xa nhưng nó không hiện diện cục bộ.
Deke

13

Nếu đây là lần đẩy đầu tiên của bạn

chỉ cần thay đổi

git push <repo name> master

thay đổi nó như thế này

git push -f <repo name> master

1
Điều này loại bỏ các tập tin như ban đầu tạo ra trong nguồn gốc. Thay vì sử dụng git pulltrước để có được các tập tin từ xa và hợp nhất cam kết của bạn sau đó. Giống như câu trả lời được chấp nhận
JayJay

@jayjaybricksoft Cảm ơn bạn đã bình luận. Đây là lần đẩy đầu tiên, vì vậy thay thế các tệp gốc là Ok.
Mahyar


2

Các câu trả lời được cung cấp không làm việc cho tôi.

Tôi đã có một repo trống trên GitHub chỉ với tệp LICENSE và một cam kết duy nhất cục bộ. Những gì đã làm việc là:

$ git fetch
$ git merge --allow-unrelated-histories
Merge made by the 'recursive' strategy.
 LICENSE | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)
 create mode 100644 LICENSE

Ngoài ra trước khi mergebạn có thể muốn:

$ git branch --set-upstream-to origin/master
Branch 'master' set up to track remote branch 'master' from 'origin'.

0

Tôi đã làm theo các bước sau:

Kéo thầy:

git pull origin master

Điều này sẽ đồng bộ repo cục bộ của bạn với repo Github. Thêm tệp mới của bạn và sau đó:

git add .

Cam kết thay đổi:

git commit -m "adding new file  Xyz"

Cuối cùng, đẩy chủ gốc:

git push origin master

Làm mới repo Github của bạn, bạn sẽ thấy các tệp mới được thêm vào.


0

Nếu bạn đang sử dụng Visual S2019, Tạo một nhánh cục bộ mới như được hiển thị sau đây, sau đó đẩy các thay đổi sang repo Chi nhánh địa phương VS2019

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.