2012-07-06 19 views
16

Nếu tôi có nhiều phiên bản bộ bản vá cho một thay đổi trong Gerrit, có vẻ như tôi chỉ có thể gửi phiên bản bộ vá mới nhất (vì chỉ có một phiên bản có nút cần thiết). Có cách nào dễ dàng để thay thế gửi một trong các phiên bản bộ vá lỗi cũ của cùng một thay đổi, chỉ sử dụng trình duyệt web của tôi trên phiên bản Gerrit đó?Hoàn nguyên về phiên bản bộ vá lỗi cũ hơn thông qua giao diện người dùng Gerrit?

Tôi biết rằng tôi có thể tìm nạp phiên bản mong muốn của bản vá được đặt từ ứng dụng khách git của tôi và đẩy nó như một phiên bản bộ vá mới khác ở trên cùng, nhưng tôi muốn tránh các phiên bản bộ vá giống hệt nhau nhiều lần trong bài đánh giá và thảo luận xung quanh nó.

Trả lời

11

Không, xin lỗi, điều này hiện không thể thực hiện được. Thiết kế giả định rằng tập bản vá mới nhất là một trong những nhà phát triển sẽ xem xét và kiểm tra, và như vậy bộ vá lỗi cũ hơn không thể được gửi. Họ cũng không thể được xem xét/xác minh. Nếu bạn muốn sử dụng một phiên bản cũ hơn của một tập bản vá, bạn phải gửi lại nó để biến nó trở thành tập bản vá mới nhất. Để tránh không có thay đổi mới lỗi nào git commit --amend và git sẽ tạo một sha1 mới, sẽ được Gerrit chấp nhận một cách hạnh phúc dưới dạng tập bản vá mới.

+6

Điều này không hoạt động: Khi đẩy cam kết của một tập bản vá cũ, tôi nhận được lỗi "không có thay đổi mới". – oberlies

+1

Đó là một chút phức tạp. Bạn cần phải thực sự hoàn nguyên các thay đổi được giới thiệu bởi các bản vá lỗi sau bản cập nhật mà bạn muốn, sau đó sửa đổi những sửa đổi đó thành bài đánh giá và gửi lại. Điều đó sẽ đưa bạn trở lại trạng thái được thể hiện bằng bản vá mà bạn muốn. Bạn có thể có thể thực hiện điều này với các reflog, nếu bạn biết những gì bạn đang tìm kiếm, nhưng tôi sẽ phải để lại cho các thuật sĩ git đúng. – geekofalltrades

+4

Đây là thứ hoạt động, mặc dù nó có thể là một chút hack: tìm trong trạng thái HEAD của bản vá mới nhất, gọi nó là X và trạng thái HEAD của bản vá mà bạn muốn hoàn nguyên, gọi nó là Y. Do 'git diff HEAD @ {X} HEAD @ {Y} | git áp dụng - index'. Bây giờ bạn có các thay đổi được tổ chức để hoàn tác tất cả các thay đổi được thực hiện ở giữa Y và X. Thực hiện 'git commit --amend', sau đó gửi lại đánh giá. Bây giờ bạn có một bản vá mới sẽ đưa bạn trở lại trạng thái của bản vá mong muốn. – geekofalltrades

0

Trong giao diện người dùng Gerrit nhấp Patch Sets và trong trình đơn thả xuống, bạn sẽ thấy tất cả các bản vá cùng với ID cam kết của chúng. Chỉ cần nhấp vào cam kết mà bạn muốn và chọn Revert trong phần panel giữa

Gerrit patch sets

Bạn cũng có thể có được ID và kiểm tra cam kết/sửa đổi các cam kết sau đó gửi để xem xét lại

Nếu bạn muốn kéo/fetch/cherry-pick một tập bản vá cụ thể, sau đó nhấp vào Download ở bên phải Patch Sets và sao chép lệnh cần thiết. Trong lệnh, bạn sẽ thấy một URL như thế này

ssh://[email protected]/branch.1 refs/changes/1/3456/4 
              ^

Lưu ý số ở vị trí cuối cùng. Đó là số bản vá. Vì vậy, nếu bạn muốn nhận bản vá lỗi 02 nd, hãy sửa đổi URL thành ssh://[email protected]/branch.1 refs/changes/1/3456/2

-1

Không có cách nào thích hợp để thực hiện việc này chỉ bằng Gerrit UI. Cherry chọn "bộ bản vá" cụ thể của "danh sách thay đổi" (ví dụ: nếu có 15 bản vá trong Danh sách thay đổi và muốn hoàn nguyên về bộ bản vá # 8). Lấy lệnh cherry-pick từ Gerrit UI cho tập bản vá cần thiết.

Chạy lệnh chọn anh đào đó và sử dụng git commit --amend, sau đó đẩy thay đổi của bạn. Nó sẽ tạo ra tập bản vá mới (ví dụ trên # 16).

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