Sobes.tech
Junior

Чӣ гуна аломатро дар коммит иваз кардан мумкин аст?

sobes.tech AI

Ҷавоб аз AI

Дарозӣ чанд роҳ барои тағир додани рамз дар комит:

  1. Таҳрири комити охирин (то ҳол нарасонда шудааст):

    Шумо метавонед фармони git commit --amend-ро истифода баред. Ин имкон медиҳад, ки паёми охирин комитро тағир диҳед ё файлҳоро илова ё хориҷ кунед.

    # Таҳрири паёми комити охирин
    git commit --amend -m "Паёми нав бо рамзи дигар"
    

    Пас аз иҷрои ин фармон, муҳаррири матнӣ кушода мешавад, ки дар он шумо метавонед паёми комитро таҳрир кунед.

  2. Таҳрири комитҳои кӯҳна (бо истифода аз rebase интерактивӣ):

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

    # Ифтитоҳи rebase интерактивӣ аз комити пеш аз он, ки тағир дода шавад
    git rebase -i HEAD~N  # ки N шумораи комитҳо дар пасзаминаи HEAD аст
    

    Пас аз иҷрои ин фармон, муҳаррири матнӣ бо рӯйхати охирин N комит кушода мешавад. Комити, ки мехоҳед тағир диҳед, ёбед ва калимаи pick-ро бо rewordr) иваз кунед.

    Сақланда ва муҳаррирро мебандед. Пас, Git пешниҳод мекунад, ки паёми ҳар як комитро, ки ҳамчун reword нишон дода шудааст, тағир диҳед.

    Мисоли мазмуни муҳаррир барои rebase интерактивӣ:

    pick a1b2c3d Комити 1: Паёми аслӣ
    pick e4f5g6h Комити 2: Паёми дигар
    pick i7j8k9l Комити, ки бояд тағир дода шавад
    

    Мувофиқ карда:

    pick a1b2c3d Комити 1: Паёми аслӣ
    pick e4f5g6h Комити 2: Паёми дигар
    reword i7j8k9l Комити, ки бояд тағир дода шавад
    

    Пас аз сабт, Git дар комити сеюм истода, пешниҳод мекунад, ки паёми онро тағир диҳед.

  3. Истифодаи git filter-branch (барои тағиротҳои мураккаб):

    Ин усул қувватмандтар аст, аммо бояд бо эҳтиёт истифода шавад. Он имкон медиҳад, ки таърихро бо истифода аз скрипт ба ҳар як комит нависед. Мутобиқ аст барои тағироти оммавии рамзҳо дар паёмҳои комит.

    # Мисол барои истифодаи filter-branch барои иваз кардани рамзи '_' бо '-' дар паёмҳои комит
    git filter-branch --msg-filter 'sed "s/_/-/"' -- --all
    

    Ин таърихро дар ҳамаи шохаҳо навишт. Бо эҳтиёт истифода баред!

Эзоҳ: Тағироти таърих дар комитҳое, ки аллакай push шудаанд, метавонад мушкилотро барои дигарон ба вуҷуд орад. Онҳо бояд репозиторияҳои маҳаллии худро бо таърихи тағирёфта ҳамоҳанг кунанд, ки метавонад талаб кунад, ки маҷбурӣ кашидан (git pull --rebase ё git fetch && git reset --hard origin/branch).