2013-05-03 1 views
1

Скажем, у меня есть куча файлов, которые были изменены с помощью набора изменений X. Этот набор изменений теперь HEAD. Я хочу разделить все изменения на файлы, соответствующие regex '* Test.java', в другой набор изменений. Если я:Git отменяет изменения в файлах, которые соответствуют регулярному выражению, в частности, в наборе изменений

git diffstat HEAD^ HEAD 

Я бы в настоящее время получить что-то вроде:

M  a/b/c/ThisIsSomeClass.java 
M  a/b/c/d/ThisIsSomeTest.java 
M  a/JustAnotherClass.java 
M  a/b/c/AnotherTest.java 

Какой последовательности команд Git я могу сделать, чтобы отделить файлы * Test.java в другую ревизию?

ответ

1

Нечто подобное должно работать. Обязательно запустите его в копии вашего Git repo сначала, чтобы убедиться, что он работает правильно; если вы не будете осторожны с запуском reset, можно потерять работу. В общем, при выполнении таких манипуляций вы должны убедиться, что ваш каталог чист; все должно быть зафиксировано, спрятано или проигнорировано, поэтому нет никаких важных изменений или незакрепленных файлов.

git reset --soft HEAD^ 
git reset $(git diff --cached --name-only -- '*Test.java') 
git commit -m "This is the first commit, that does not contain the *Test.java" 
git add -u . 
git commit -m "This is the second commit, of just the *Test.java files" 

reset --soft сбросит вас совершить HEAD^, но все изменения от последней фиксации еще поставил, готовы к фиксированию. Следующий git reset остановит все измененные файлы с именем *Test.java, оставив остальные по-прежнему поставлены. Конец будет выполнять те изменения, которые все еще проводятся. Теперь вы снова создаете все остальные файлы, с git add -u . (это будет только сфабриковать файлы, которые будут изменены, но не будет добавлять новые файлы, поэтому это безопасно работать, даже если у вас есть другие файлы, которые вы не хотите добавлять к вашему фиксации, если у вас есть новые файлы, которые вы не выполняли в процессе выполнения этого, затем отпустите -u или добавьте их отдельно). И затем вы фиксируете этот второй набор файлов.

+0

Работал отлично. Большое спасибо. Один вопрос: - кэшированный - это то же самое, что и правильное? – Charlotte

+0

Да, '--cached' совпадает с' -staged'. –

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