2013-07-18 2 views
0

Предположим, что я сделал чек из ветки master. Там есть 2 файла: A и B.Зафиксировать локальные файлы для разных ветвей

Я отредактировал оба из них, теперь у меня есть файлы A1 и B1. Внезапно я понял, что это было бы хорошей идеей, чтобы разделить эти изменения следующим образом:

  • создать branchA и совершить A1, но оставить B без изменений. (branchA имеет A1 и B)
  • создать branchB и совершить B1, но оставить A без изменений. (ветвь B имеет B1 и A)

Как достичь этого с минимальными усилиями?

ответ

4

Вам действительно не нужно прикладывать. Обычно создание новой ветки не уничтожает незафиксированные изменения. Так что это должно работать:

git checkout -b branchA 
git add A A1 
git commit -m 'Changes in branchA.' 
git checkout -b branchB HEAD~ 
git add B B1 
git commit -m 'Changes in branchB.' 
+0

Не теряйте изменения в файле B1 при сбросе на HEAD ~? – Dan

+0

Вы не потеряете свои изменения, поскольку это не был сброс. Это создавало ветку в точке. – cforbish

1

Сначала нужно добавить файл A1 быть поручены:

git add A1 

тайник ваши изменения на B1:

git stash 

затем создать и переключиться на ветку branchA и совершить изменения, сделанные на A1:

git checkout -b branchA 
git commit -m "modification on A1" 

затем создайте переключатель в ветвь branchB (будьте осторожны: созданы с помощью мастера) и примените ваш тайник:

git checkout -b branchB master 
git stash apply 
git add B1 
git commit -m "modification on B1" 
+0

Ха, я также думал копить сделает работу – Dan

+1

cforbish прав: 'мерзавец stash' не нужно. Но после его ответа есть одна вещь, которую я совершенно не понимаю: изменился ли файл A, а А1 - новый созданный файл? Или A не изменилось, и A1 - модифицированная копия A (такая же для B/B1, конечно)? – Frodon

+1

Я думал, что «А1» обозначил «A (изменено)» ... Является ли А1 новым или нет, метод cforbush должен работать. – Number8

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