Thắc mắc về lệnh reset trong git


như trong hình thì
git log của master branch sẽ có commit1,commit2,commit3,commit4
git log của dev branch sẽ có commit1,commit2,commit3,commit5,commit6

bây giờ em sử dụng lệnh reset --hard commit1 trên nhánh dev để reset tất cả về commit 1 , thì lúc này hình dạng của cây git sẽ như thế nào ạ , tức là tất cả commit2,commit3,commit5,commit6 trên nhánh dev sẽ bị xóa và dồn vào commit1 như vậy có đúng không , vì commit1,commit2,commit3 được dùng chung giữa 2 branch , vậy thực chất các lệnh reset nó sẽ làm việc gì

1 Like

Khi reset --hard commit1 trên nhánh dev thì HEAD của nhánh dev sẽ trỏ về commit1.
commit5 và commit6 sẽ bị xóa vĩnh viễn nếu không có bất cứ nhánh nào khác sử dụng 2 commit này.
commit2, commit3 sẽ còn tồn tại ở nhánh master.
Chính vì vậy. Nếu bạn chưa thực sự chắc chắn về hậu quả của reset --hard thì nên tạo 1 nhánh dev_backup tại commit6 trước khi thực hiện hành động này.

ví dụ giờ , tại nhánh dev mình thay đổi commit 1 thì cũng chẳng ảnh hưởng đến commit1 bên nhánh master phải không
vì em đọc ở đây https://git-scm.com/book/vi/v1/Ph%C3%A2n-Nh%C3%A1nh-Trong-Git-Nh%C3%A1nh-L%C3%A0-G%C3%AC%3F thấy nó nói thực ra khi tạo 1 branch là tạo 1 con trỏ trỏ đến commit trên tree commit thôi , vậy thì trong cả chương trình chỉ có 1 tree git mà cả branch dev, master cũng chung 1 gốc là commit1,commit2,commit3 thì sao branch dev thay đổi thông tin của commit1 thì ko ảnh hưởng đến commit1 bên nhánh master nhỉ

Commit được kết lại bằng hash :slight_smile: nên nếu muốn thay đổi một nhánh thì phải tạo lại hết các commit từ đó trở về sau. Branch dev không ảnh hưởng là vậy.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?