1

, например я хочу отказаться от всех фиксаций, чьи фиксации сообщение «температура фиксации», то есть, если исходная история коммитов выглядит следующим образом:Как отказаться от фиксации определенной характеристики при использовании git?

X1 - X2 - X4 -X7 - .... Xn-2 - Xn-1 - Xn 
     \_ X3 -X5 - .. 
      \_ X6 - X8 .. 


    and x4 "temp commit" 
    X6 "temp commit" 
    Xn-1 "temp commit" 

тогда история коммитов будет переписать следующим образом, что коммиты x4, x6 и xn-1 заброшены.

Если у репо есть всего 2000 коммитов, и 500 из коммитов, чье сообщение является «temp commit», то 500 коммитов будут оставлены, и останется только 1500 коммитов, как это сделать, переписывая историю git?

Я знаю, что это может иметь какое-то отношение к ветви фильтра, я знаю, как удалить папку с использованием --tree-index, но как удалить фиксации определенной характеристики?

X1 - X2 -X7 - .... Xn-2 - Xn 
     \_ X3 -X5 - .. 
      \_ X8 .. 

ответ

1

От here, я хотел бы попробовать (но я не проверял, что)

git filter-branch --commit-filter ' 
    MSG=$(git log --format=%B -n 1 $GIT_COMMIT) 
    if [ "$MSG" = "temp commit" ]; 
    then 
     skip_commit "[email protected]"; 
    else 
     git commit-tree "[email protected]"; 
    fi' HEAD 

Функция skip_commit определяется следующим образом, экспорт его или положить его в .bashrc

skip_commit() 
{ 
    shift; 
    while [ -n "$1" ]; 
    do 
     shift; 
     map "$1"; 
     shift; 
    done; 
} 

Я не уверен, что это работает для всего репозитория или только для одной ветви.

+0

Если это должно быть записано в файле сценария, трудно записать все это в командную строку – hugemeow

+0

Да, возможно, я взял пример только из ссылки и немного изменил ее (удалить коммит от автора). – martin

+0

@hugemeow В любом случае вы можете как минимум скопировать и вставить его. – martin

Смежные вопросы