2012-12-21 66 views
30

Thực hiện thay đổi đối với cam kết, thực hiện cam kết sửa đổi. Thực hiện một cú đẩy và tôi gặp lỗi:Git/gerrit, đẩy từ xa bị từ chối không có thay đổi nào được thực hiện

! [remote rejected] master -> refs/for/master (no changes made) 

Đã kiểm tra ID thay đổi trong tin nhắn cam kết và đó vẫn là cam kết hợp lệ.

Tôi đã thử thay đổi tệp, kiểm tra tệp đó hiển thị dưới dạng thay đổi và sau đó thêm vào khu vực dàn dựng và thực hiện một cam kết khác được sửa đổi. Hãy thử đẩy lại và nhận được cùng một vấn đề. Không có ý tưởng về điều này.

Chỉnh sửa: Điều này đang thúc đẩy gerrit chứ không phải git trực tiếp.

Tôi đang chạy:

git push origin master:refs/for/master 

Và kết quả nhận được các chi tiết xuất xứ được (với các chi tiết công ty sửa ra):

$ git remote show origin 
* remote origin 
    Fetch URL: ssh://[email protected]:29418/myrepo 
    Push URL: ssh://[email protected]:29418/myrepo 
    HEAD branch: master 
    Remote branch: 
    master tracked 
    Local branch configured for 'git pull': 
    master rebases onto remote master 
    Local ref configured for 'git push': 
    master pushes to master (up to date) 
+0

Bạn đang chạy lệnh gì và bạn thuộc chi nhánh nào? – Amber

+0

Tôi đang ở trên máy chủ cục bộ, và tôi đang chạy 'git push origin master: refs/for/master' và origin được thiết lập với các URL nạp và đẩy hợp lệ. – edwardmlyte

+0

Giả sử bạn đang sử dụng cú pháp 'refs/for/...' thay vì 'refs/heads/...', bạn có đang sử dụng Gerrit không? Nếu vậy, điều đó sẽ có liên quan cao đến câu hỏi của bạn và cần được đề cập. – Amber

Trả lời

45

Vấn đề này là do các hành động tôi đã thực hiện trước đây. Tôi đã cố gắng để push một thay đổi mới, trên đầu trang của một thay đổi vẫn còn để xem xét, người cha mẹ cũng đã được lên để xem xét.

Trunk ------ Parent A ----- Parent B ----- New change 
(merged)  (unmerged)  (unmerged) 

tôi đã sử dụng cherry-pick để có được hai sự thay đổi này tại địa phương (Parent A và B Chánh), và sau đó một phần ba cherry-pick để có được sự thay đổi của tôi từ một chi nhánh địa phương trước khi cố gắng push. Đó là những gì gây ra vấn đề, bởi vì thay đổi cá nhân của tôi chủ yếu là cố gắng viết lại lịch sử.

Quy trình chính xác sẽ chỉ là pull B mẹ khi ở thân cây. Điều này tự động kéo lên bất kỳ cam kết giữa thân cây và nó (trong trường hợp này chỉ là cha mẹ A). Sau đó, cherry-pick thay đổi mới của tôi trên đó và push sẽ hoạt động tốt.

+8

Hôm nay, chúng tôi đã gặp sự cố.Vấn đề là chúng tôi đã có trong gerrit: Change1 (sáp nhập) - Change2 (unmerged) - Change3 (unmerged) Chúng tôi muốn áp dụng xuất bản một bản vá mới được thiết lập để Change3 nhưng nó đã bị từ chối. Thông báo: ''! Sau khi gãi đầu của chúng tôi, chúng tôi phát hiện ra rằng chúng tôi đã rebased tại địa phương và rằng Change2 cũng đã nhận được một băm mới cam kết nhưng nó không có thay đổi mới. Chúng tôi đã giải quyết nó bằng cách rebasing lại một cách tương tác cục bộ một lần nữa và reworded Change2 bằng cách thêm một ký tự ở cuối thông điệp cam kết. Sau đó nó là tốt để xuất bản. – mortb

2

Có vẻ như bạn đang làm tất cả mọi thứ một cách chính xác như đến khi xác minh bạn đã thực hiện một thay đổi mà Gerrit nên nhận.

git push origin master:refs/for/master

Có thể đây là vấn đề? Nếu các thay đổi của bạn không có trên phiên bản địa phương của nhánh chính, bạn không phải đang đẩy các thay đổi của mình. Thay vào đó hãy thử:

git push origin HEAD:refs/for/master

HEAD là một phím tắt đại diện hiện tại của bạn cam kết trong git.

+0

Lỗi tương tự với lối tắt đó. HEAD có tham chiếu đến thay đổi hiện tại trong nhánh hiện tại hay chỉ thay đổi hiện tại trong nhánh chính? – edwardmlyte

+1

HEAD đề cập đến thay đổi hiện tại của bạn. Chi nhánh bạn đang ở không quan trọng. Nếu đẩy với HEAD không giúp được gì, tôi nghi ngờ việc sửa đổi của bạn không thay đổi cam kết. Thử cập nhật/thay đổi thông báo cam kết khi bạn sửa đổi và sau đó đẩy lại. – Brad

+0

Cảm ơn sự giúp đỡ của bạn Brad, phát hiện ra tôi đã sử dụng git không chính xác. – edwardmlyte

2

Nếu bạn đang cố gắng cập nhật một tập hợp đánh giá, mỗi id có id thay đổi của riêng bạn mà bạn muốn duy trì (nói, sau khi rebase bạn đổi thứ tự của hai lần commit), bạn có thể bị từ chối nếu một số các cam kết trong cọc vẫn không thay đổi. Bạn nên buộc một băm mới được tạo ra bằng cách viết lại các cam kết, hoặc một cái gì đó tương tự.

+6

Tôi phải làm một "git commit --amend" mà không có thay đổi, và điều này dường như để khắc phục vấn đề của tôi. – Stuart

0

Tôi gặp vấn đề tương tự. Đồng thời có một cam kết khác không được sáp nhập để làm chủ và được xem xét gerrit và bị loại bỏ trong gerrit. tức là mã được đẩy để xem xét. rebased trong gerrit và xem xét đang chờ xử lý để kết thúc. Khi mã đã được xem xét, tôi có thể đẩy mà không có lỗi.

0

Tôi có thông báo lỗi tương tự, nhưng những thay đổi mà tôi cố gắng đẩy lên trên các cam kết khác nhau từ tập Thay đổi ban đầu (đã thực hiện một số thủ thuật ma thuật với git cherry-pick và có vẻ như gerrit không thích nó). Tôi đã từ bỏ sự thay đổi ban đầu của mình, sau đó mở lại nó khi tôi nhận ra rằng tôi có thể khắc phục vấn đề, nhưng không gửi đến gerrit với git review.

Tại thời điểm này, giải pháp nhanh chóng của tôi là từ bỏ thay đổi ban đầu từ trang web gerrit và tạo thay đổi mới bằng cách xóa change-Id: sha1 dòng cuối cùng khỏi thư cam kết với git commit --amend.

0

Với thông báo lỗi này Gerrit từ chối đẩy cam kết dưới dạng bản vá mới được đặt cho thay đổi, nếu cam kết được đẩy giống hệt với bộ bản vá hiện tại của thay đổi này.

Một đẩy cam kết được coi là giống với bản vá hiện tại thiết lập nếu

  • các tập tin trong cam kết,
  • các cam kết thông báo,
  • tác giả của cam kết và
  • sự cha mẹ của cam kết

đều giống nhau.

1

Vui lòng tham khảo các tài liệu chính thức về vấn đề này ở đây:

https://gerrit-review.googlesource.com/Documentation/error-no-new-changes.html

tôi đã cùng một vấn đề, vấn đề của tôi là tôi đẩy sự thay đổi, sau đó bị bỏ rơi mà hợp nhất, sau đó tôi đã thực hiện một vài điều chỉnh , sai sửa đổi cam kết của tôi và được đẩy lại. Đó là nơi tôi gặp lỗi.

sửa chữa của tôi:

  1. Nếu bạn chỉ muốn nhanh chóng có được xung quanh vấn đề này, đừng git commit --amend, loại bỏ các hiện change-Id, giả sử bạn có các móc git thiết lập, bạn có thể hoàn thành các cam kết và một mới change-Id nên được chỉ định cho bạn.
  2. Đi vào gerrit và tìm kiếm change-Id hiện có của bạn, tìm hiểu điều gì đang diễn ra và sửa lỗi tương ứng. (được khuyến nghị)
Các vấn đề liên quan