2009-03-06 74 views
45

Tôi bỏ cuộc! Bất cứ khi nào tôi cố gắng đẩy tôi trở nên ngu ngốc:git push bị từ chối

! [rejected]  master -> master (non-fast forward) 
error: failed to push some refs to '[email protected]:companyX/projectX.git' 

Nhóm của chúng tôi có thiết lập git mới. Thay vì tạo ra các nhánh riêng, bây giờ tôi đã gộp kho lưu trữ chính của chúng ta (trên github) để tạo bản sao của riêng tôi.

Tại một thời điểm nào những gì tôi đã làm là:

$ git fetch upstream master:upstreammaster 

Vì vậy, đây là thiết lập hiện tại của tôi ::

$ git branch 
master 
* upstreammaster 

$ git remote -v 
origin [email protected]:userX/projectX.git 
upstream [email protected]:companyX/projectX.git 

nơi userX là kho lưu trữ riêng tư của tôi.

Vì vậy, tôi sẽ thực hiện một số thay đổi đối với nhánh upstreammaster của tôi và PULL từ "thượng nguồn". Tất cả mọi thứ kết hợp và các công cụ:

$ git pull upstream master 
remote: Counting objects: 95, done. 
remote: Compressing objects: 100% (60/60), done. 
remote: Total 60 (delta 54), reused 0 (delta 0) 
Unpacking objects: 100% (60/60), done. 
From [email protected]:companyX/projectX 
* branch   master  -> FETCH_HEAD 
Merge made by recursive. 
stuff      | 165 ++++++++++++-------- 
stuff      | 35 ++-- 
stuff      | 107 ++++++++++--- 
stuff      | 105 ++++++++++--- 
stuff    | 24 ++-- 
stuff    | 9 +- 
stuff     | 53 +++---- 
stuff   | 44 +++--- 
stuff    | 52 +++---- 
stuff | 32 +---- 
stuff   | 4 +- 
stuff    | 138 ++++++++--------- 
stuff  | 58 ++++---- 
stuff | 115 ++++++++------ 
stuff   | 5 +- 
stuff      | 39 ++--- 
stuff      | 28 ++-- 
17 files changed, 560 insertions(+), 453 deletions(-) 

nhưng sau đó khi tôi cố gắng để làm:

$ git push upstream master 
To [email protected]:companyX/projectX.git 
! [rejected]  master -> master (non-fast forward) 
error: failed to push some refs to '[email protected]:companyX/projectX.git' 

Bất kỳ trợ giúp sẽ được đánh giá cao greately! Nếu bạn cần làm rõ xin vui lòng hỏi, tôi sẽ trả lời!

+0

@drozzy: Bạn có biết tại sao Git không chấp nhận lệnh của bạn? Lệnh của bạn đã từng làm việc cho tôi. Sau khi tôi chuyển Git sang một thư mục khác trong máy Mac, tôi nhận được một thông báo lỗi tương tự. –

+0

không xin lỗi tôi không biết. Ngay bây giờ tôi chủ yếu làm "git push upstream master", sau khi sáp nhập nhánh khác của tôi vào upstreammaster. – drozzy

+0

Xem thêm [Git đẩy các bản cập nhật không nhanh về phía trước đã bị từ chối] (http://stackoverflow.com/questions/4684352/whats-a-fast-forward-in-git). –

Trả lời

20

Khi làm một đẩy, cố gắng xác định refspec cho các thầy thượng nguồn:

git push upstream upstreammaster:master 
+1

Điều này làm việc vì một số lý do ... – drozzy

+3

@ Jarret: Nó không hoạt động đối với tôi. Mã của tôi $ git push [email protected]: user/repo.git [email protected]: user/repo.git: master. –

+0

Masi, hãy thử mà không sử dụng URL đầy đủ trên tham số thứ hai: git push [email protected]: user/repo.git master –

13

Thứ nhất, nỗ lực để kéo từ refspec tương tự mà bạn đang cố gắng để đẩy tới.

Nếu điều này không hoạt động, bạn có thể bắt buộc git push bằng cách sử dụng git push -f <repo> <refspec>, nhưng hãy thận trọng: phương pháp này có thể khiến tài liệu tham khảo bị xóa trên kho lưu trữ từ xa.

16

Jarret Hardie là chính xác. Hoặc, trước tiên hãy hợp nhất các thay đổi của bạn lại thành chính và sau đó thử đẩy. Theo mặc định, git push đẩy tất cả các nhánh có tên phù hợp trên điều khiển từ xa - và không có tên nào khác. Vì vậy, đó là hai lựa chọn của bạn - hoặc chỉ định nó rõ ràng như Jarret nói hoặc hợp nhất trở lại một nhánh chung và sau đó đẩy.

Đã được nói về điều này trên danh sách thư Git và rõ ràng rằng hành vi này sẽ không thay đổi sớm - nhiều nhà phát triển dựa vào hành vi này trong luồng công việc của họ.

Edit/Làm rõ

Giả sử chi nhánh upstreammaster bạn đã sẵn sàng để đẩy thì bạn có thể làm điều này:

  1. Pull trong bất kỳ thay đổi từ thượng nguồn.

    $ git pull thượng nguồn chủ

  2. Chuyển đến chi nhánh tổng thể địa phương của tôi

    $ git checkout chủ

  3. Merge thay đổi trong từ upstreammaster

    $ git merge upstreammaster

  4. Đẩy các thay đổi của tôi lên

    $ git push ngược dòng

Một điều mà bạn có thể muốn làm trước khi đẩy là rebase thay đổi của bạn chống lại thượng nguồn/master để cam kết của bạn là tất cả cùng nhau. Bạn có thể làm điều đó dưới dạng một bước riêng biệt giữa # 1 và # 2 ở trên (git rebase upstream/master) hoặc bạn có thể làm điều đó như một phần của lệnh kéo (git pull --rebase upstream master)

+0

Làm thế nào để bạn có nghĩa là "hợp nhất trở lại một nhánh chung và sau đó đẩy"? Chi nhánh chung trong trường hợp này là gì? – drozzy

+0

Tôi đã có cùng một vấn đề sau khi kiểm tra và làm việc trên một chi nhánh, và đẩy các thay đổi bao gồm một bản cập nhật cho một tập tin đã bị xóa trong nhánh chính (mà tôi đã không cảm động chút nào). Một nhà phát triển khác đã thử một số lệnh Git mà tôi không nắm bắt được, nhưng vấn đề vẫn tồn tại: 'git status' cho thấy nhánh của tôi đã sạch,' git pull' không làm gì cả, nhưng lệnh 'git push' vẫn output' error: không đẩy được một số refs ... '. Cuối cùng tôi đã có vấn đề cố định như thế này: 1. 'git checkout master', 2.' git pull', và 3. 'git checkout the_branch_name'. –

+0

er ... tốt, và điều gì sẽ xảy ra khi bạn thực hiện lệnh đầu tiên (git pull upstream master) và bạn có xung đột trong pull ??? Bạn phải giải quyết cuộc xung đột trước khi tiếp tục ?? –

3

Kho lưu trữ của bạn ở trạng thái "ngược dòng"? Tôi đã gặp lỗi tương tự, nhưng khi tôi thay đổi để trần họ không còn xảy ra.

+0

tuyệt vời, đây là chính xác những gì đã gây ra vấn đề của tôi, cảm ơn câu trả lời! – adamc

Các vấn đề liên quan