Sobes.tech
Junior

Чӣ тавр метавон чанд коммитро бо Git ба як коммит табдил дод?

sobes.tech AI

Ҷавоб аз AI

Барои якҷоя кардани чандин коммитҳо дар Git, фармони git rebase -i <commit-ish>-ро истифода баред.

  1. Коммити, то ки ба он ҳамроҳ кунед, муайян кунед. Ин метавонад хеши коммит, шоха ё теги бошад.
  2. Фармони git rebase -i <commit-ish>-ро иҷро кунед. Масалан, барои ҳамроҳ кардани 3 коммити охирин:
    git rebase -i HEAD~3
    
  3. Вориди муҳаррири матн бо рӯйхати коммитҳо мешавад. Коммити аввал дар рӯйхат (болға) бояд калимаи pick дошта бошад. Коммитҳои дигар, ки мехоҳед бо аввал ҳамроҳ кунед, бояд аз pick ба squash ё s тағир дода шаванд.
    pick abcd123 Коммити ибтидоӣ
    squash efgh456 Баъди 1-уми функсия A
    squash ijkl789 Баъди 2-юми функсия A
    ...
    
  4. Ҳуҷҷатро сабт ва мебароред.
  5. Ҳуҷҷати нав барои эҷоди паёми коммит кушода мешавад. Паёмҳоро ҳамроҳ ё таҳрир кунед, то паёми маънӣ барои коммити нав эҷод кунед.
    // Паёми барои коммити нав
    
    // Ин якҷоягии 3 коммитҳо мебошад.
    
    // Коммити ибтидоӣ
    // Баъди 1-уми функсия A
    // Баъди 2-юми функсия A
    
  6. Ҳуҷҷатро сабт ва мебароред. Git коммитҳоро ҳамроҳ мекунад.

Агар шоха, ки шумо дар он кор мекунед, аллакай ба анбори дур фиристода шудааст, бояд push-и маҷбурӣ бо рамзи -f ё --force-with-lease анҷом диҳед.

git push origin <шоха_атон> -f

Ин зарур аст, зеро таърихи коммитҳо тағир ёфтааст. Push-и маҷбурӣ метавонад хатарнок бошад, агар дигар таҳиягарон аллакай дар ин шоха кор мекунанд. Ҳамеша санҷед, ки оё push-и маҷбурӣ кардан бехатар аст.

Алтернатива, шумо метавонед рамзҳои --fixup ва --autosquash-ро ҳангоми коммит истифода баред ва сипас git rebase -i --autosquash <commit-ish>-ро барои ҳамроҳкунии автоматӣ иҷро кунед.