Từ thư mục gốc của bản sao làm việc của bạn chỉ làm
git checkout A2 -- .
git commit -m 'going back to A2'
Sử dụng git revert
cho mục đích này sẽ là cồng kềnh, vì bạn muốn loại bỏ toàn bộ một loạt các cam kết và revert
hoàn tác chúng từng lần một.
Bạn cũng không muốn git reset
. Điều đó sẽ chỉ thay đổi con trỏ chi nhánh master
của bạn: bạn bị bỏ lại không có bản ghi về hướng bị nhầm lẫn. Nó cũng là một nỗi đau để phối hợp: vì cam kết bạn đã thay đổi master
thành không phải là con của con trỏ nhánh của một kho lưu trữ từ xa là master
, sẽ không thành công - trừ khi bạn thêm -f
(bắt buộc) hoặc xóa chi tiết master
trong kho lưu trữ từ xa trước và tạo lại bằng cách đẩy. Nhưng sau đó tất cả những người cố gắng để kéo sẽ vẫn có lịch sử cũ trong chi nhánh địa phương của họ master
, do đó, một khi origin/master
phân kỳ, git pull
sẽ cố gắng thực hiện hợp nhất. Đây không phải là kết thúc của thế giới: họ có thể thoát ra khỏi tình huống này bằng cách thực hiện git rebase --onto origin/master $old_origin_master_commit master
(tức là rebase cam kết địa phương của họ được thực hiện trên đầu trang của origin/master
cũ lên trên cùng của origin/master
mới). Nhưng Git sẽ không biết làm điều này tự động vì vậy bạn phải phối hợp với mọi cộng tác viên. Tóm lại, đừng làm thế.
Nguồn
2008-10-21 08:18:18
Áp phích gốc gần như chắc chắn muốn hoàn nguyên không được đặt lại. Vì tất cả mọi người đã kéo A3 và A4 vào kho lưu trữ địa phương của riêng họ, tôi nghĩ việc cài đặt lại sẽ làm mọi thứ lộn xộn. –
git-revert sẽ chỉ hoàn nguyên một lần commit và git-reset là điều không đúng đối với các thay đổi được xuất bản. Câu trả lời đúng là git-checkout. –
Aristotle Pagaltzis: bạn là chính xác, tôi đã đánh nó từ câu trả lời của tôi. – freespace