Как совершить конкретные изменения в git - PullRequest
0 голосов
/ 12 июня 2018

Я переименовал интерфейс (IMoo to IKey) и файл класса (Moo to Key).После этого я создал метод (blob ()) в файле класса и создал реализацию в интерфейсе.Как я могу отдельно зафиксировать эти два изменения в git?

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

1 Ответ

0 голосов
/ 12 июня 2018

Гораздо проще фиксировать изменения по мере их внесения, чем пытаться отделить их после того, как они все объединены вместе.

Это означает, что может быть проще повторно выполнить первое изменение, зафиксироватьэто, а затем повторно применить все изменения, чем возиться с такими вещами, как интерактивная постановка.

Повторить подход

Так, например, вы можете сохранить и отложить в сторонуваши текущие изменения

git stash

Затем повторите операцию переименования, которая должна быть простой.Затем что-то вроде

git add .
git commit -m "rename class and interface"

Затем верните свои полные изменения.Чтобы избежать возможных конфликтов, я бы сделал что-то вроде

git checkout HEAD^
git stash pop
git reset --mixed HEAD@{1}

И теперь вы должны увидеть переименование в своей истории, а оставшиеся изменения в вашем рабочем дереве готовы к постановке и фиксации.

Нет повторного подхода

Вышеприведенное предполагает, что вы можете легко повторить переименование класса, либо потому, что это небольшое изменение (небольшая база кода, либо, по крайней мере, не так много ссылок по всей базе кода).это относится к затронутому классу и интерфейсу) или потому что ваша IDE сделает это за вас (что, если нет, возможно, вы захотите подумать об использовании более хороших инструментов разработки).Но что, если у вас было более сложное изменение?

В идеале вы могли бы сказать git add -i, чтобы начать интерактивный промежуточный сеанс, и пройтись по подсказкам, чтобы указать, что изменение имени класса происходит, но новоеметод отсутствует.Это должны быть отдельные фрагменты изменений, так что ладно ...

Но проблема в том, что, в зависимости от языка программирования и компоновки кода, возможно, вы переименовали файл, когда переименовали класс.Интерактивные инструменты постановки плохо справляются с этим.

Так что в этом случае вы можете вернуться к предыдущему коммиту, просто переименовать файлы и зафиксировать это, а затем восстановить вашвнесите изменения поверх нового коммита, затем выполните интерактивную промежуточную операцию.Но к тому времени, когда вы сделаете все это, вы сделали почти все шаги моего первоначального предложения, плюс интерактивная перебазировка, и у вас все еще будет дополнительный / сломанный / предположительно нежелательный коммит в истории (который вы бы сделаливероятно, хотите раздавить) ... так какой в ​​этом смысл?

Ну, если по какой-то причине вы хотите попробовать это таким образом, см. документацию git add, относящуюся к опциям -i и -p.https://git -scm.com / документы / ГИТ-добавить

...