#git #git-add
#git #git-добавить
Вопрос:
У меня есть файл, который я модифицировал с помощью двух наборов изменений: форматирования и добавления новой функции.
Мне нужно превратить их в 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
, — это зафиксировать текущие изменения, а затем удалить эти строки из самого коммита.
Есть ли другой способ сделать это?
Комментарии:
1. Мне было бы любопытно узнать, что послужило причиной снижения, поскольку я нашел это полезным и четко заданным. Не то, чтобы могло быть никаких причин для понижения, конечно, мне просто интересно.
Ответ №1:
Есть также, git reset --patch
что является обратным git add --patch
.
Однако для одного небольшого изменения использование git gui
может быть проще — вы можете интерактивно создавать отдельные строки кода, просто щелкнув их правой кнопкой мыши. Некоторые другие графические интерфейсы Git могут иметь аналогичные функции.
В противном случае, вот немного уродливый способ сделать это, не проходя все заново:
git diff --cached >temp.diff
git reset
- Отредактируйте
temp.diff
и удалите фрагмент с изменением, которое вы не хотели фиксировать git apply --cached --recount temp.diff
- Фиксация
Комментарии:
1. Спасибо, это то, что мне действительно было нужно!
Ответ №2:
Я бы предложил следующее:
Использовать git stash
(https://www.git-scm.com/docs/git-stash ):
git stash --keep-index
Это помещает ваше текущее рабочее дерево в хранилище и сохраняет ваши поэтапные изменения
Будьте в курсе неотслеживаемых файлов. По умолчанию неотслеживаемые файлы не помещаются в хранилище! (Для этого есть другой вариант:--include-untracked
)- Изменить
FileA
соответствующим образом git add -p -- FileA
Внесите свои новые изменения — теперь у вас готов первый коммитgit stash pop
илиgit stash apply
(независимо от того, хотите ли вы сохранить свои изменения в тайнике или нет)- Теперь у вас почти готов второй коммит в рабочем дереве (внесите необходимые изменения, этап, зафиксируйте, …)