Egit bị từ chối không tua đi nhanh


89

Tôi nhận được thông báo này trong khi chuyển sang kho lưu trữ github. Bạn có thể cho tôi biết thủ tục từng bước để sửa chữa nó? Tôi chỉ đẩy một lần và nó đã thành công. Tuy nhiên, khi tôi cập nhật một dự án và cố gắng đẩy cam kết thứ hai của mình, nó hiển thị "chủ bị từ chối không tua đi nhanh" và không cho phép tôi đẩy. Vui lòng giải thích thủ tục.


Tôi đã gặp vấn đề tương tự sau khi tạo một kho lưu trữ mới với "Khởi tạo kho lưu trữ này bằng README". Tôi đã xóa cái đó và tạo lại những cái mà không có hộp chechbox này.
andrew

@andrew nói đúng
Dany Wehbe

Câu trả lời:


226

Tôi đã gặp vấn đề tương tự và tôi đã có thể khắc phục nó. afk5min đã đúng, vấn đề là nhánh mà bạn lấy mã từ đó đã thay đổi trên kho lưu trữ từ xa. Theo các thông lệ git tiêu chuẩn ( http://git-scm.com/book/en/Git-Basics-Working-with-Remotes ), bạn cần (bây giờ) hợp nhất những thay đổi đó tại kho lưu trữ từ xa vào các thay đổi cục bộ trước khi bạn có thể cam kết. Điều này có ý nghĩa, điều này buộc bạn phải thực hiện các thay đổi khác và hợp nhất chúng vào mã của bạn, đảm bảo rằng mã của bạn tiếp tục hoạt động với các thay đổi khác tại chỗ.

Dù sao, trên các bước.

  1. Định cấu hình 'tìm nạp' để tìm nạp nhánh mà bạn đã lấy từ ban đầu.

  2. Tìm nạp chi nhánh từ xa.

  3. Hợp nhất chi nhánh từ xa đó vào chi nhánh cục bộ của bạn.

  4. Cam kết thay đổi (hợp nhất) trong repo cục bộ của bạn.

  5. Đẩy thay đổi vào repo từ xa.

Chi tiết...

  1. Trong nhật thực, hãy mở chế độ xem 'Kho lưu trữ Git'.

  2. Đảm bảo bạn nhìn thấy kho lưu trữ cục bộ của mình và có thể xem kho lưu trữ từ xa dưới dạng một thư mục con. Trong phiên bản của tôi, nó được gọi là Điều khiển từ xa, và sau đó tôi có thể thấy dự án từ xa trong đó.

  3. Tìm mũi tên màu xanh lá cây chỉ sang trái, đây là mũi tên 'tìm nạp'. Nhấp chuột phải và chọn 'Định cấu hình tìm nạp'.

  4. Bạn sẽ thấy URI, đảm bảo rằng nó trỏ đến kho lưu trữ từ xa.

  5. Tìm trong phần ánh xạ tham chiếu của cửa sổ bật lên. Của tôi trống rỗng. Điều này sẽ cho biết bạn muốn tìm nạp các tham chiếu từ xa nào. Nhấp vào 'Thêm'.

  6. Nhập tên chi nhánh bạn cần lấy từ kho lưu trữ từ xa. Của tôi là 'chủ' (btw, một danh sách thả xuống ở đây sẽ rất tuyệt !!, bây giờ, bạn phải gõ nó). Tiếp tục qua cửa sổ bật lên, cuối cùng nhấp vào 'Hoàn tất'.

  7. Nhấp vào 'Lưu và Tìm nạp'. Điều này sẽ tìm nạp tham chiếu từ xa đó.

  8. Tìm trong thư mục 'Chi nhánh' của kho lưu trữ cục bộ của bạn. Bây giờ bạn sẽ thấy nhánh từ xa đó trong thư mục từ xa. Một lần nữa, tôi thấy 'chủ nhân'.

  9. Nhấp chuột phải vào chi nhánh cục bộ trong thư mục 'Cục bộ' của 'Chi nhánh', được đặt tên là 'chính'. Chọn 'Hợp nhất', rồi chọn nhánh từ xa, được đặt tên là 'origin / master'.

  10. Xử lý thông qua hợp nhất.

  11. Cam kết bất kỳ thay đổi nào đối với kho lưu trữ cục bộ của bạn.

  12. Đẩy các thay đổi của bạn vào kho lưu trữ từ xa.

  13. Đi uống một ly nước giải khát ngon, tự chúc mừng bản thân. Nghỉ phần còn lại trong ngày.


7
Đây nên được đánh dấu là câu trả lời. Làm việc như người ở. Sự cố này xảy ra ngay cả khi tôi không thêm bất kỳ tệp nào (tệp README thông thường) khi tạo kho lưu trữ trên GitHub cho dự án của tôi trong Eclipse. Cảm ơn rất nhiều vì sự giải thích từng bước dễ dàng làm theo.
rbaleksandar

Vấn đề này tôi đã mất một năm để giải quyết, cho đến khi tôi đọc được bài đăng của bạn. Trong trường hợp của tôi, tôi không có điều khiển từ xa nhưng Eclipse đã tạo một điều khiển mặc định được gọi là 'origin'.
Eugene van der Merwe

Tuyệt vời, cuối cùng tôi có thể hợp nhất với Eclipse. Điểm mấu chốt ở đây là sử dụng chế độ xem Kho lưu trữ Git để thực hiện hợp nhất, chứ không phải chế độ xem Đồng bộ hóa nhóm thông thường. Sẽ rất tốt nếu trong nhóm đồng bộ hóa chế độ xem eGit có thể vô hiệu hóa tất cả các tùy chọn không làm gì cả.
dan carter

1
Trong khi điều này hoạt động, nó tạo ra một cam kết hợp nhất không cần thiết. Bạn nên sử dụng rebase ở đây, điều này tốt vì các thay đổi của bạn chỉ mang tính cục bộ nên bạn sẽ không thay đổi bất kỳ lịch sử đã xuất bản nào (và nếu bạn làm vậy, git sẽ hét vào mặt bạn vì sự thúc đẩy không nhanh chóng). Tôi thích câu trả lời của MYN.
nyuszika7h

1
Nhấp chuột phải vào dự án và sau đó Mergetrong tổng thể và sau đó nhấn chuột phải một lần nữa về dự án push branch Masterlàm việc
user1207289

17

Trong trường hợp của tôi, tôi đã chọn Force Updatehộp kiểm trong khi đẩy. Nó làm việc như một say mê.


Điều này cũng làm việc cho tôi. Tôi đã có điều kiện của OP sau khi "sửa đổi" một cam kết. Và lấy đưa cho tôi "không có gì để lấy"
Twilite

11

Trong thời gian chờ đợi (khi bạn đang cập nhật dự án của mình), các cam kết khác đã được thực hiện cho nhánh 'chính'. Do đó, bạn phải kéo những thay đổi đó trước để có thể đẩy những thay đổi của mình.


4
trong trường hợp này git khá là ngu ngốc, tôi đã đẩy tất cả các thay đổi vào điều khiển từ xa. và tôi là người duy nhất trong dự án. Tại sao tôi phải kéo điều khiển từ xa trước khi tôi có thể đẩy lại ???? sự thay đổi kéo sẽ đến từ địa phương của tôi ban đầu
Junchen Liu

7

Áp dụng cho Eclipse Luna + Eclipse Git 3.6.1

TÔI,

  1. kho git nhân bản
  2. thực hiện một số thay đổi trong mã nguồn
  3. các thay đổi theo giai đoạn từ Git Staging View
  4. cuối cùng, cam kết và Đẩy!

Và tôi đã đối mặt với vấn đề này với EGit và đây là cách tôi khắc phục nó ..

Có, ai đó đã cam kết các thay đổi trước khi tôi thực hiện các thay đổi của mình. Vì vậy, các thay đổi bị từ chối. Sau lỗi này, các thay đổi thực sự được cam kết vào kho lưu trữ cục bộ. Tôi không muốn chỉ Pullthay đổi vì tôi muốn duy trì linear historynhư đã chỉ ra trong - Trong những trường hợp nào thì `git pull` có thể gây hại?

Vì vậy, tôi đã thực hiện các bước sau

  1. từ quan điểm Kho lưu trữ Git, nhấp chuột phải vào
    dự án Git liên quan
  2. select Fetch from Upstream- nó tìm nạp các bản cập nhật từ xa (refs và các đối tượng) nhưng không có bản cập nhật nào được thực hiện cục bộ. để biết thêm thông tin, hãy tham khảo Sự khác biệt giữa 'git pull' và 'git fetch' là gì?
  3. select Rebase...- cái này sẽ mở một cửa sổ bật lên, nhấp vào để Preserve merges during rebasexem tại sao
    "rebase --preserve-merges" của git chính xác làm gì (và tại sao?)
  4. bấm vào Rebase button
  5. nếu có / có a conflict(s), hãy chuyển sang bước 6 khác bước 11
  6. một Rebase Resultcửa sổ bật lên sẽ xuất hiện, chỉ cần nhấp vàoOK
  7. file comparatorsẽ mở ra, bạn cần phải sửa đổi left side file.
  8. khi bạn đã hoàn tất việc hợp nhất các thay đổi một cách chính xác, goto Git Stagingview
  9. stage the changes. I Eadd to index
  10. trên cùng một chế độ xem, nhấp vào Rebase-> Continue. lặp lại từ 7 đến 10 cho đến khi tất cả các xung đột được giải quyết.
  11. từ Historychế độ xem, chọn hàng cam kết của bạn và chọnPush Commit
  12. chọn Rebase Commits of local.......hộp kiểm và nhấp vào tiếp theo. tham khảo lý do - Git: rebase vào nhánh phát triển từ thượng nguồn
  13. bấm vào Finish

Lưu ý: nếu bạn có nhiều cam kết của kho lưu trữ cục bộ, bạn cần tách chúng trong một cam kết để tránh nhiều lần hợp nhất.


Tôi đồng ý với việc sử dụng rebase thay vì hợp nhất. Nó tốt hơn vì nó không tạo ra một cam kết hợp nhất không cần thiết. (Lạc đề: Stack Overflow đang hoàn toàn vô lý và từ chối nhận xét của tôi chỉ dựa trên thực tế là ban đầu tôi đã viết "+1 cho". Nhận xét của tôi hoàn toàn mang tính xây dựng, cảm ơn bạn.)
nyuszika7h

4

Định cấu hình Sau khi đẩy mã khi bạn nhận được thông báo bị từ chối, hãy nhấp vào cấu hình và nhấp vào Thêm thông số như thể hiện trong hình này

Giới thiệu nguồn và Giới thiệu đích Thả xuống và nhấp vào ref / heads / yourbranchname và nhấp lại vào Add Spec

nhập mô tả hình ảnh ở đây Đảm bảo bạn chọn bản cập nhật buộc

nhập mô tả hình ảnh ở đây Cuối cùng lưu và đẩy mã vào repo


3

Mở chế độ xem git:

1- chọn dự án của bạn và chọn hợp nhất 2- Chọn theo dõi từ xa 3- nhấp vào ok

Git sẽ hợp nhất nhánh từ xa với kho lưu trữ cục bộ

4- sau đó đẩy


2

Lỗi này có nghĩa là kho lưu trữ từ xa đã có các cam kết khác và đã đi trước chi nhánh cục bộ của bạn.
Tôi thử thực hiện git pull sau đó là git push. Nếu chúng là Không có thay đổi xung đột, git pull nhận mã mới nhất đến chi nhánh cục bộ của tôi trong khi vẫn giữ nguyên các thay đổi của tôi.
Sau đó, một git push đẩy các thay đổi của tôi đến nhánh chính.


Có vẻ như rất nhiều người đang bỏ lỡ giải pháp đơn giản này: D
Black

0

Tôi nhận thấy rằng bạn phải sử dụng bản cam kết mới nhất của git. Vì vậy, đây là các bước cần thực hiện: 1) đảm bảo rằng bạn không làm việc trên các tệp giống nhau, nếu không bạn sẽ gặp phải lỗi DITY_WORK_TREE. 2) kéo những thay đổi mới nhất. 3) cam kết cập nhật của bạn.

Hi vọng điêu nay co ich.


-1
  1. Truy cập Github và tạo một repo cho mã mới của bạn.
  2. Sử dụng url https hoặc ssh mới trong Eclise khi bạn thực hiện đẩy lên ngược dòng;
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.