2013-04-17 9 views
22

Để điều tra hiệu ứng được giới thiệu bởi cam kết trước đó, tôi muốn đảo ngược áp dụng nó vào bản sao làm việc của tôi và fiddle xung quanh với mã.Đảo ngược Áp dụng cam kết làm việc sao chép

Tôi đã quản lý luồng công việc xung quanh việc tạo và áp dụng bản vá, nhưng tự hỏi liệu điều này có thể được thực hiện dễ dàng hơn không.

git checkout -b "tmp-fiddle" 
git diff -R -p d9fd2bb^ d9fd2bb > patch_to_examine.patch 
# Manually edit the patch a little 
git apply patch_to_examine.patch 

Lưu ý rằng tôi không nhìn vào git revert hoặc git rebase -i vì đây hoặc là sẽ giới thiệu một mới cam kết hoặc thay đổi lịch sử: Tôi chỉ muốn những thay đổi được giới thiệu trong d9fd2bb là un-áp dụng cho bản sao làm việc hiện tại của tôi.

+0

Chỉnh sửa thủ công bạn đang làm là gì? –

+0

Đó là bản vá không áp dụng sạch; gửi cảnh báo về khoảng trắng. – berkes

Trả lời

35

Làm thế nào về git revert -n?

-n 
--no-commit 

Thông thường các lệnh tự động tạo ra một số cam kết với cam kết thông điệp log ghi mà các cam kết đã được hoàn nguyên. Cờ này áp dụng các thay đổi cần thiết để hoàn nguyên các cam kết được đặt tên cho cây làm việc của bạn và chỉ mục, nhưng không thực hiện các cam kết. Ngoài ra, khi tùy chọn này được sử dụng, chỉ mục của bạn không phải khớp với cam kết CHÍNH. Việc hoàn nguyên được thực hiện dựa trên trạng thái bắt đầu của chỉ mục của bạn.

Điều này hữu ích khi hoàn nguyên nhiều hơn một hiệu ứng cam kết cho chỉ mục của bạn liên tiếp.

+1

Thật không may, điều này chỉ hoạt động miễn là bản sao làm việc của bạn không có sửa đổi đối với bất kỳ tệp nào bị ảnh hưởng bởi cam kết (nó có thể có thay đổi trong các tệp khác). Tôi đoán, trong trường hợp này bạn cần 'git stash; git revert -n ; git stash pop' và giải quyết xung đột (nếu có). – arekolek