2012-03-02 33 views
69

Tôi chỉ thực hiện một số git pull --rebase origin master và có xung đột.Chính xác thì git rebase --skip làm gì?

Thứ nhất, xung đột này nằm trong một tệp mà tôi chưa chạm và khoảng 10 lần commit trở lại. Lý do tại sao điều này xảy ra?

Tôi sau đó vô tình nhập git rebase --skip và nó 'bỏ qua bản vá đó'.

Lo lắng rằng tôi đã bỏ qua một cam kết, tôi đã kiểm tra một phiên bản mới của nhánh master và đã làm một sự khác biệt giữa nhánh mà tôi đã thực hiện rebase, và nhánh master mới. Những thay đổi duy nhất hiển thị trong diff là cam kết mới nhất, và nhìn vào nhật ký, bản vá được 'bỏ qua', hiển thị trong lịch sử cam kết.

Có ai có thể giải thích những gì đang xảy ra ở đây không?

+7

Làm thế nào để bạn vô tình gõ 'git rebase --skip'. Có thể sai? :) – manojlds

+1

Ha! Có nghĩa là gõ --abort, nhưng đối với một số lý do không rõ nó ra như --skip. Wasnt thực sự suy nghĩ. :) – mrwooster

+5

lịch sử trình bao là tốt ở đây (để làm cho bạn thực hiện một cái gì đó bạn không muốn). – Florian

Trả lời

39

Nó thực hiện những gì nó nói, nó bỏ qua một cam kết. Nếu bạn chạy rebase --abort sau một xung đột trong cùng một lần rebase, thì commit bị bỏ qua cũng sẽ được hoàn nguyên.

Nếu thay đổi của bạn đã tồn tại ở phía trên, Git sẽ không thể áp dụng cam kết của bạn (nhưng thường phải tự động bỏ qua, nếu bản vá chính xác). Cam kết của riêng bạn sẽ bị bỏ qua, nhưng thay đổi sẽ vẫn tồn tại trong HEAD hiện tại, vì nó đã được áp dụng ngược dòng.

Bạn thực sự nên chắc chắn rằng bạn không loại bỏ một sự thay đổi quan trọng của bạn;) (sử dụng reflog quay trở lại trạng thái trước khi rebase)

+4

Vậy tại sao cam kết vẫn hiển thị trong nhật ký? Và tại sao các cam kết còn thiếu bây giờ hiển thị trong diff? – mrwooster

+0

Cuộc xung đột là gì? Có lẽ bản vá của bạn đã được áp dụng ngược dòng. Git sẽ phàn nàn về một cam kết trống rỗng sau đó, mặc dù. – knittl

+3

Vâng, cuộc xung đột đã được giải quyết ngược dòng ... vì một số lý do git rebase mang lại xung đột hợp nhất cũ ... một điều khác khiến tôi bối rối? ... điều này có nghĩa là nó bỏ qua xung đột, nhưng áp dụng bản vá đã giải quyết cuộc xung đột? – mrwooster

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