git переместить часть изменений из "быть добавленным" в локальные изменения - PullRequest
1 голос
/ 06 марта 2019

У меня есть файл, который я изменил с 2 изменениями: форматирование и добавление новой функции.

Мне нужно превратить их в 2 коммита.
- Изменения форматирования
- Новая функция A.

Теперь я использовал git add --patch и поставил все элементы форматирования.Итак, у меня есть:

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   FileA   <-- formatting changes

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   FileA  <-- Feature A

Теперь, перед фиксацией, я понял, что добавляю одну функцию (несколько строк) к изменениям форматирования (она должна попадать внутрь изменений компонента).

Могу ли я как-то отредактировать изменения, которые будут внесены?Файл имеет большое значение, и я не хочу повторяться с git add --patch.

Единственное решение, о котором я могу подумать, чтобы пропустить прогон через git add --patch, это зафиксировать текущие изменения и затем удалить эти строки.из самого коммита.

Есть ли другой способ сделать это?

Ответы [ 2 ]

4 голосов
/ 06 марта 2019

Существует также git reset --patch, что противоположно git add --patch.

Для одного небольшого изменения использование git gui может быть проще, однако - вы можете интерактивно ставить / удалять отдельные строки кода, просто щелкая их правой кнопкой мыши. Некоторые другие графические интерфейсы Git могут иметь аналогичные функции.

Если это не удастся, вот несколько уродливый способ сделать это, не пройдя все заново:

  • git diff --cached >temp.diff
  • git reset
  • Редактировать temp.diff и удалить кусок с изменением, которое вы не хотели совершать
  • git apply --cached --recount temp.diff
  • Commit
0 голосов
/ 06 марта 2019

Я бы предложил следующее:
Использовать git stash (https://www.git -scm.com / docs / git-stash ):

  1. git stash --keep-index
    Это помещает ваше текущее рабочее дерево в хранилище и сохраняет ваши поэтапные изменения.
    Помните о неотслеживаемых файлах.По умолчанию неотслеживаемые файлы не помещаются в тайник!(Для этого есть еще один вариант: --include-untracked)
  2. Изменить FileA соответственно
  3. git add -p -- FileA
    Подготовить новые изменения - теперь у вас есть готовый первый коммит
  4. git stash pop или git stash apply (где вы хотите сохранить свои изменения в тайнике или нет)
  5. Теперь ваш второй коммит почти готов в рабочем дереве (внесите необходимые изменения, этап, коммит, ...)
...