chủ bị từ chối -> chủ (không chuyển tiếp nhanh)


216

Tôi đang cố gắng đẩy dự án của mình (tất cả các tệp trong một kho lưu trữ mới). Tôi làm theo các bước nhưng khi tôi đẩy git push -u origin mastertôi gặp lỗi này:

! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:asantoya/projectnewbies.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

Tôi đã gặp lỗi này nhiều lần và không thể biết phải làm gì.


4
Nếu bạn chắc chắn chủ địa phương của bạn có những thay đổi mới nhất bạn muốn trên điều khiển từ xa, thì hãy thực hiện git đẩy
Force

34
git push --force <remote_repository>đã làm cho tôi.
Sắp xếp

@Sorter - Tôi đã gặp vấn đề tương tự cả ngày, điều này đã giúp tôi !! Cảm ơn bạn. Nhưng nó không cung cấp một lời giải thích về lý do tại sao vấn đề xảy ra ngay từ đầu và tại sao việc khắc phục lại hiệu quả.
Padawan

1
@pmr, chỉ cần hỏi một cách nhẹ nhàng nếu OP "đọc thông báo lỗi" không giúp ích gì cả. Rõ ràng, thông báo lỗi không có ý nghĩa gì với OP, cũng như nó không tạo ra bất kỳ tin nhắn nào cho tôi, hoặc 66 người khác đã nâng cấp bài đăng của anh ấy. Snarky, wittier-than-mặc dù không giúp đỡ mọi người.
Padawan

3
@Padawan Bạn cũng sẽ nhận thấy rằng "người hợm hĩnh, khờ khạo" này đã cung cấp câu trả lời được chấp nhận cho câu hỏi này và 72 người (có thể bao gồm cả bạn) thấy nó hữu ích. Tôi xin lỗi vì nhận xét của tôi xuất hiện là kiêu ngạo, nhưng đó sẽ là câu hỏi đầu tiên của tôi nếu bạn hỏi tôi câu hỏi đó trong bối cảnh chuyên nghiệp. Đôi khi dừng lại và dành một phút để đọc kỹ thông báo lỗi đôi khi làm điều kỳ diệu. Tôi đã làm cho tôi khi tôi thấy lỗi đó lần đầu tiên.
pmr

Câu trả lời:


160

Như thông báo lỗi nói: git pulltrước khi bạn cố gắng git push. Rõ ràng chi nhánh địa phương của bạn không đồng bộ với chi nhánh theo dõi của bạn.

Tùy thuộc vào quy tắc dự án và quy trình làm việc của bạn, bạn cũng có thể muốn sử dụng git pull --rebase.


1
nó cho tôi thấy tính năng hợp nhất tự động README.md này không thành công; khắc phục xung đột và sau đó cam kết kết quả.
Asantoya17

1
@ Asantoya17 Những thay đổi đã được thực hiện đối với xung đột chính từ xa với những thay đổi của bạn. Xem lại các tập tin và xem xét chúng. Sau đó cam kết kết quả giải quyết. Vui lòng nhận một hướng dẫn hoặc cuốn sách hoặc ít nhất là đọc các tin nhắn.
pmr

1
Kéo có nghĩa là gì? Cho phép bạn đẩy tệp hoặc tìm nạp và tải xuống tệp từ trang web của kho lưu trữ? (ví dụ: Bit Buck)
David Dimalanta

4
@AndrewS git push --force origin master. Nếu bạn gặp phải những vấn đề đó hơn một lần trong đời, quy trình làm việc dự án của bạn sẽ bị phá vỡ. Các tính năng nên được phát triển trong các nhánh và được hợp nhất mà không cần chuyển tiếp nhanh và nếu một tính năng "không thành công", bạn nên hoàn nguyên cam kết hợp nhất (tốt nhất là thử nghiệm trong nhánh tích hợp trước khi bạn hợp nhất một tính năng thành chủ). Không có ý tưởng về Eclipse mặc dù.
pmr

1
Phải làm gì nếu lỗi đó báo cáo git pull origin trunk:master?
Andry

175

THÔNG BÁO: Đây không bao giờ là một khuyến cáo sử dụng git. Điều này sẽ ghi đè lên các thay đổi trên điều khiển từ xa. Chỉ làm điều này nếu bạn biết 100% rằng các thay đổi cục bộ của bạn sẽ được đẩy sang chủ từ xa.

Thử cái này: git push -f origin master


47
Không, đừng thử cái này. Từ git help push: "Điều này có thể khiến kho lưu trữ từ xa bị mất xác nhận; hãy cẩn thận sử dụng nó."
jcsahnwaldt phục hồi Monica

7
chắc chắn không làm điều này
Lluís

14
Điều này làm việc cho tôi. Tôi cho rằng nó ổn vì cam kết duy nhất của tôi trên github là cái được tạo bằng repo mới. Có lẽ là một ý tưởng tốt để không sử dụng nó sau khi bắt đầu một dự án.
Matthew Moore

1
có thể hữu ích nếu bạn muốn cập nhật một repo được tạo ra cho mục đích phân phối (vì vậy không có thay đổi mới nào ở phía xa)
HiB

Tôi chỉ sử dụng điều này khi tôi vừa thực hiện một cam kết, được đồng bộ hóa với GitHub, sau đó ước rằng tôi đã thêm một tệp khác vào cam kết đó. Vì vậy, tôi đã gỡ bỏ nó cục bộ, thực hiện lệnh trên để xóa nó khỏi GitHub, sau đó cam kết lại cục bộ, sau đó được đồng bộ hóa. Tất cả đều tốt ngay bây giờ! Nhắc bạn, tôi biết một thực tế rằng không có cam kết nào khác được thực hiện cho chi nhánh đó.
zeMinimalist

18

lệnh này hoạt động tốt với tôi

git push -f origin master

3
Hãy thận trọng trước khi sử dụng lệnh này. Bằng cách sử dụng lệnh này, bạn sẽ mất tất cả các cam kết trong quá khứ.
twenk11k

không-có nghĩa là lực đẩy
maheshmnj

@maheshmnj Vâng!
testuser

15

Tôi vừa nhận được lỗi này.

Tôi đã tạo một kho lưu trữ github sau khi tạo kho lưu trữ git cục bộ của mình vì vậy tôi cần chấp nhận các thay đổi thành cục bộ trước khi đẩy sang github. Trong trường hợp này, thay đổi duy nhất là tệp readme được tạo dưới dạng bước tùy chọn khi tạo kho lưu trữ github.

git pull https://github.com/*username*/*repository*.git master

URL kho lưu trữ được lấy từ đây trên trang github của dự án:

nhập mô tả hình ảnh ở đây

Sau đó tôi đã khởi tạo lại (điều này có thể không cần thiết)

git init
git add .
git commit -m "update"

Sau đó đẩy:

git push

3
Câu trả lời này phản ánh kịch bản trường hợp thực tế.
kta

9

tôi đã tạo repo mới trong github và tôi có cùng một vấn đề, nhưng nó cũng có vấn đề trong khi kéo, vì vậy điều này làm việc cho tôi.

nhưng điều này không được khuyên trong các repos đã có nhiều mã vì điều này có thể làm rối tung mọi thứ

git push origin master --force

Câu trả lời này đã được đưa ra: stackoverflow.com/a/16374574/1771479 , và không nên làm.
agold 7/12/2015

9

CẢNH BÁO:

Đi cho một ' git pull' không phải là luôn luôn là một giải pháp, vì vậy hãy cẩn thận. Bạn có thể phải đối mặt với vấn đề này (vấn đề được đề cập trong Q) nếu bạn cố tình thay đổi lịch sử kho lưu trữ của mình. Trong trường hợp đó, git đang gây nhầm lẫn thay đổi lịch sử của bạn với những thay đổi mới trong repo từ xa của bạn. Vì vậy, bạn nên đi tìm git push --force, bởi vì việc gọi git pullsẽ hoàn tác tất cả những thay đổi bạn đã thực hiện đối với lịch sử của mình.


8

Nếu git pullkhông giúp được thì có lẽ bạn đã đẩy các thay đổi của mình (A) và sau đó đã sử dụng git commit --amendđể thêm một số thay đổi (B). Do đó, git nghĩ rằng bạn có thể mất lịch sử - nó diễn giải B là một cam kết khác mặc dù nó chứa tất cả các thay đổi từ A.

             B
            /
        ---X---A

Nếu không ai thay đổi repo sau A, thì bạn có thể làm git push --force.

Tuy nhiên, nếu có thay đổi sau Atừ người khác:

             B
            /
        ---X---A---C

sau đó bạn phải rebase rằng người thay đổi từ AđếnB ( C-> D).

             B---D
            /
        ---X---A---C

hoặc khắc phục sự cố bằng tay. Tôi đã không nghĩ làm thế nào để làm điều đó chưa.


7

sử dụng lệnh này:

git pull --allow-unrelated-histories <nick name of repository> <branch name>

giống:

git pull --allow-unrelated-histories origin master

lỗi này xảy ra khi các dự án không có tổ tiên chung.


7
git push -f origin master

sử dụng sức mạnh vũ phu ;-) Rất có thể bạn đang cố gắng thêm một thư mục cục bộ mà bạn đã tạo trước khi tạo repo trên git.


2
Bất kỳ và mọi câu trả lời bao gồm điều này sẽ đưa ra một cảnh báo.
D. Ben Knoble

1
Tôi đã thử điều này và nó đã tiêu tốn của tôi rất nhiều cam kết trên GitHub mà tôi phải khôi phục từ một bản sao địa phương khác của repo. Nguy hiểm.
Paflow

6

Điều này là do bạn đã thực hiện một số thay đổi trong chủ của mình nên dự án yêu cầu bạn kéo trước. Nếu bạn muốn đẩy nó bằng mọi cách, bạn có thể sử dụng vũ lực bằng cách gõ này:

git push -f origin master

Hãy nhớ để đầu tiên cam kết thay đổi của bạn:

git add .
git commit -m "Your commit message"


4

Bạn cần phải làm

git branch

nếu đầu ra là một cái gì đó như:

* (no branch)
master

sau đó làm

git checkout master

Hãy chắc chắn rằng bạn không có bất kỳ cam kết đang chờ xử lý nào vì việc kiểm tra sẽ mất tất cả các thay đổi không được cam kết.


4

! [bị từ chối] chủ -> chủ (không chuyển tiếp nhanh)

Đừng hoảng sợ, điều này cực kỳ dễ sửa chữa. Tất cả bạn phải làm là đưa ra một cú kéo và chi nhánh của bạn sẽ được chuyển tiếp nhanh:

$ git kéo myrepo chủ

Sau đó thử lại cú đẩy của bạn và mọi thứ sẽ ổn:

$ git đẩy github chính


4

Điều này xảy ra với tôi khi tôi ở nhánh phát triển và nhánh chính của tôi không có bản cập nhật mới nhất.

Vì vậy, khi tôi cố gắng git đẩy từ nhánh phát triển, tôi đã gặp lỗi đó.

Tôi đã sửa nó bằng cách chuyển sang nhánh master, git pull, sau đó quay lại để phát triển nhánh và git đẩy.

$ git fetch && git checkout master
$ git pull
$ git fetch && git checkout develop
$ git push

3

Tôi đã có vấn đề này trên một máy phát triển. Các devchi nhánh được đẩy tốt nhưng các masterchi nhánh đã cho tôi (trong khi git pushing khi đang trên devchi nhánh):

! [rejected]        master -> master (non-fast-forward)

Vì vậy, tôi đã cố gắng:

git checkout master
git pull

Mà đã cho tôi:

You asked me to pull without telling me which branch you
want to merge with, and 'branch.master.merge' in
your configuration file does not tell me, either.

Tôi phát hiện ra nhánh chính bị thiếu .git/configvà thêm vào:

[branch "master"]
    remote = origin
    merge = refs/heads/master

Sau đó git pushcũng làm việc tốt trên devchi nhánh.


2

Điều khiển từ xa của tôi không đồng bộ với địa phương nên điều này hiệu quả với tôi

git pull --rebase

và đảm bảo rằng khi bạn làm git pulllại, nó sẽ báo Đã cập nhật và bây giờ bạn đã sẵn sàng đẩy về nguồn gốc

giả sử bạn đã git remote add origin remote repository URL

làm

`git push origin master`  

Ảnh chụp màn hình nói lên tất cả nhập mô tả hình ảnh ở đây

Ngoài ra, bạn có thể làm điều này

  1. git stash (tạm thời không có công việc)
  2. git pull (làm cho đồng bộ cục bộ và từ xa của bạn)
  3. git stash pop (lấy lại cho bạn những thay đổi không được cam kết)
  4. đẩy git

1

Tôi đã có cùng một vấn đề. Tôi sử dụng Git Totoise. Chỉ cần nhấp chuột phải -> TotoiseGit -> Dọn dẹp. Bây giờ bạn có thể đẩy lên Github Nó hoạt động tốt với tôi: D


1

Điều này là do bạn đã thực hiện các thay đổi xung đột với chủ của nó. Và máy chủ kho lưu trữ của bạn không thể nói với bạn rằng với những từ này, do đó, nó gây ra lỗi này vì đó không phải là vấn đề của anh ấy đối phó với những xung đột này cho bạn, vì vậy anh ấy yêu cầu bạn tự làm điều đó. Như ?

1- git pull Điều này sẽ hợp nhất mã của bạn từ kho lưu trữ của bạn với mã của chủ trang web của bạn. Vì vậy, xung đột được hiển thị.

2- xử lý các xung đột thủ công.

3-

git push origin master

Và thế là, vấn đề của bạn đã được giải quyết.


0

Điều duy nhất tôi có thể giải quyết vấn đề này là xóa repo cục bộ và git và tạo lại như cũ ở cả hai đầu. Hoạt động tốt cho bây giờ.


Tôi luôn luôn sao lưu repo git của mình trên Dropbox. Bằng cách đó, tôi không phải xóa repo cục bộ, tôi chỉ sao chép và dán các thư mục có liên quan từ Dropbox khi tình huống phát sinh.
IgorGanapolsky

0

Nếu bất cứ ai có lỗi này trong khi cố gắng đẩy sang heroku thì chỉ cần thay 'nguồn gốc' bằng 'heroku' như thế này: git push -f heroku master


0

Hãy thử điều này, trong trường hợp của tôi nó hoạt động

git rebase --abort


0

Điều này cũng có thể được gây ra do một số lỗi tên gây ra trong khi đặt tên cho Repo. Nếu bất kỳ câu trả lời nào ở trên không hiệu quả. Cái này hiệu quả với tôi:

Xóa repo đó và tạo một cái mới và thử lại các lệnh sau:

cd 'Local Directory Path'
git remote add origin *your_git_name.git*
git push -u origin master

nếu thêm chương trình gốc đã tồn tại, hãy sử dụng cái này thay thế:

git remote set-url origin *your_git_name.git*
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.