Разделение мерзавца на несколько коммитов - PullRequest
4 голосов
/ 09 августа 2011

Я исправил две ошибки в куске кода, и он изменяет общие файлы. Например, исправление ошибки 1, модифицированный файл A, B, C, и исправление ошибки 2, изменение B, C и D. Все изменения внесены в один коммит. Для проверки кода мне нужно разделить изменения на два коммита (фактически две ветви).

Я думаю, что из моей текущей ветви fix я создаю две ветви, такие как git branch fix-1 fix и git branch fix-2 fix. Обе ветви имеют все изменения. Теперь в ветке fix-1 я хотел бы сохранить изменения, относящиеся только к исправлению 1, то есть все изменения в файле A и части изменений в файлах B и C. Возможно ли это сделать в git? Какая команда подходит для этого?

Я знаю, что в git add я могу сделать интерактивное добавление, где я могу выбирать фрагменты кода для добавления, а не только на уровне файлов. Есть ли что-то подобное, что я могу сделать здесь?

Ответы [ 2 ]

5 голосов
/ 09 августа 2011

Если коммит был вашим последним коммитом, вот решение.

  1. Оформить ветку с исправлением

    git checkout fix
    
  2. Сброситьвернуться к предыдущим исправлениям, но сохранить изменения в рабочем каталоге

    git reset HEAD^
    
  3. Создать ветку для fix-1

    git checkout -b fix-1
    
  4. Добавить / зафиксировать исправления fix-1

    git add -p
    git commit
    
  5. Сохранить оставшиеся изменения

    git stash
    
  6. Оформить / создать ветку для fix-2

    git checkout -b fix-1
    
  7. Снимите ваши спрятанные изменения

    git stash pop
    
  8. Подтвердите / добавьте их

    git commit -a
    
3 голосов
/ 09 августа 2011

Из состояния, в котором вы находитесь (две ветви, каждая со всеми изменениями), войдите в каждую ветку и выполните git rebase -i fix^ и выберите «edit» для фиксации fix. Затем, когда он останавливается для редактирования коммита, вы используете git reset HEAD^, который отбрасывает коммит, но оставляет изменения в рабочем дереве. Затем используйте вашу обычную стратегию git add -p, чтобы разбить коммит на несколько git commits, а затем git rebase --continue.

Я думаю, что это в git rebase руководстве под SPLITTING COMMITS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...