Thắc mắc cơ chế gộp commit của câu lệnh rebase

  • đầu tiên tại master em tạo 3 commit , master-1,master-2,master-3
  • sau đó em tạo 3 branch 1,2,3
  • tại branch2 em reset soft và điền mã hash của commit master-1 vào , rồi sau đó commit --amend
  • sau đó em checkout sang master và gõ lệnh git rebase branch2
  • kết quả là tất cả commit trên master bị mất

trước khi rebase:

sau khi rebase:

cho em hỏi git rebase trong trường hợp này nó làm việc như thế nào? vì sao các commit bên master bị mất hết , vì sao bên branch2 em reset soft và commit amend thì nó lại tách ra khỏi cây git vậy

tại branch bạn mới reset chứ chưa git commit --amend ??

để cho tiện và dễ nhìn, mình up lại kết quả
nó không bị mất, mà sẽ merge và conflict

1 Like

sao lại có conflict nhỉ chỉ reset rồi commit lại thôi có thay đổi nội dung gì đâu ?

kết quả của bạn không bị conflict vì commit đầu là add new file, khác với cái demo mình là thay đổi file 3 lần
lệnh rebase tương đương với merge nhưng nó không để lại dấu merge
và hiển nhiên khi merge thì có thể bị conflict, hoặc có thể không
trong trường hợp của bạn, nó không báo conflict
bạn nên show chính cây git của bạn ra để xem cho rõ hơn, chứ nhìn command thì làm sao để biết được chuyện gì sẽ xảy ra
chưa kể là khi nhiều lần conmmit thì sẽ có những action khác nhau, như add, delete, update, thậm chí update lại có rất nhiều thể loại là update trùng chỗ với update lần trước, update khác chỗ, update commit 3 quay trở lại giống với commit 1 (ví dụ xxx -> yyy -> xxx), 1 trường hợp không nói nên tất cả

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