2013-07-29 25 views
6

Tôi muốn hoàn nguyên tất cả các cam kết của một tác giả cụ thể kể từ 4 ngày trước. Tôi phải làm nó như thế nào?Hoàn nguyên tất cả các cam kết của một tác giả cụ thể kể từ thời điểm cụ thể

Để có được tất cả sha1s (với một chút tiếng ồn) Tôi có thể sử dụng này:

git log --author=Mohsen --pretty=one --since=4.days 
+0

Nếu bạn đang sử dụng github, quan điểm mạng có thể có thể cho bạn khi bạn cần phải 'git reset' tới. Ngoài ra, bạn có muốn 'hoàn nguyên' hoặc' đặt lại' không? Họ có một chút khác biệt. – BlackVegetable

+0

Có những cam kết khác từ người khác. Tôi không muốn đặt lại – Mohsen

Trả lời

7

Bạn phải từ bỏ format:%H-git log và sử dụng một vòng lặp:

for sha in `git log --pretty=format:%H --author=Mohsen --since=4.days`; do 
    git revert --no-edit $sha 
done 

này sẽ tạo một cam kết mỗi lần hoàn nguyên. Loại bỏ tùy chọn --no-edit để sửa đổi thông điệp cam kết tương tác trên mỗi lần hoàn nguyên.

Hoặc, nếu bạn muốn thực hiện một Revert lớn cam kết:

for sha in `git log --pretty=format:%H`; do sharange="$sharange $sha"; done 
git revert $sharange --no-commit 
git commit -m "reverted commits $sharange" 
+0

Cảm ơn bạn! Nhưng nó không thực sự dừng lại khi có xung đột. – Mohsen

+4

nó, nếu cho một trong những trở lại có một cuộc xung đột bạn sẽ được dừng lại và được phép tiếp tục với 'git revert --continue' – CharlesB

+0

câu trả lời tuyệt vời, nhưng tôi cần phải làm thêm một chút lệnh trong đó. Tôi cần phải chấp nhận - những thay đổi của theirs nếu có xung đột và nếu nó được hợp nhất tôi cần phải sử dụng "git revert $ sha -m 1;" bạn có thể giúp tôi với nó không? –

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