2012-04-21 34 views
6

tôi muốn dẹp 2 cam kết cuối cùng của tôi thành một, vì vậy đã làm một git rebase, theo cách sau:Undo một Sai lầm thực hiện trong khi đè bẹp các cam kết trong GIT

git rebase -i HEAD~2 

nhưng do một lỗi đánh máy, những gì tôi thực đã kết thúc đẩy vào nguồn gốc là:

git rebase -i HEAD-3 

Bây giờ, trong Github Pull Request nó cho thấy cam kết của một số không liên quan khác cam kết. về cơ bản, tôi muốn xóa cam kết 06674f0 không phải của tôi, trong khi vẫn giữ fcea5e0 trong PR này.

cách khắc phục sự cố gây ra bởi lỗi đánh máy đơn giản?

Trả lời

19

Edit: Kiểm tra reflog của bạn với

git reflog 

Pick cam kết trước đó để rebase đầu tiên của bạn và thay thế x với số thích hợp dưới đây:

Chỉ cần undo rebase cuối cùng của bạn và làm lại nó:

git reset --hard [email protected]{x} 
git rebase -i HEAD~2 
.. 
git push -f origin master 

Xóa yêu cầu kéo của bạn và tạo yêu cầu mới.

+0

Có thể thực hiện mà không xóa yêu cầu kéo hiện có không? – CuriousMind

+0

Có thể nó có thể. Tôi chỉ nghĩ rằng bạn có thể muốn loại bỏ nó trong khi bạn đang làm việc với nó. – ralphtheninja

+0

Tôi đã thử nhưng không hoạt động. Thay vì hai cam kết tôi muốn hợp nhất đã bị mất và bây giờ cố gắng để chạy 'git rebase -i HEAD ~ 2' chọn lên hai cam kết từ tiếp tục trở lại trong lịch sử – CuriousMind

0

Cả git reset --hard HEAD{x}git reset --hard [email protected]{x} không hoạt động đối với tôi.

Tôi muốn một tập lệnh để làm điều này dù sao, vì vậy tôi đã làm như sau.

BACK_2_SHA=`git reflog show --pretty=format:'%H' -n x | tail -n 1` 
git reset --hard $BACK_2_SHA 
Các vấn đề liên quan