Редактировать все изменения в git? - PullRequest
1 голос
/ 13 марта 2012

Я внес несколько правок в свою ветку в нескольких файлах. Теперь я решил, что хочу внести небольшие изменения почти во все эти правки. Есть ли простой способ получить имена файлов и номера строк изменений (например, от git diff), а затем открыть мой редактор по выбору (vim, но предположить, что любой редактор, который может открыть файл по определенной строке) в каждом из эти позиции в свою очередь? Единственный способ, которым я могу подумать, - это запустить вывод diff через какой-то скрипт, но это звучит так, как будто это может быть довольно уродливо ..

Уточнение. На этом этапе я не совершал никаких коммитов.

Ответы [ 3 ]

2 голосов
/ 13 марта 2012

Если я правильно интерпретирую ваш вопрос, у вас есть несколько изменений в вашей рабочей копии.Вы нигде не вносили эти изменения, и теперь вы хотели бы сделать что-то немного отличающееся в каждом из этих мест.

Я бы порекомендовал использовать git add -p, что будет подсказывать вам git add каждыйиндивидуальный патч.Один из ваших вариантов для каждого патча - edit, который приведет вас в редактор с diff.Если вам нужно только изменить строку, вы можете просто изменить текст в добавленной строке (отмечен +) и сохранить.Немного сложнее добавить или удалить строки (хотя он говорит вам, как).

Когда вы закончите, git diff --cached покажет вам ваши новые изменения (как они будут зафиксированы), в то время как git diff покажетчто ваша рабочая копия все еще такая, какой она была, когда вы запустили git add -p.Затем вы можете git commit желаемые изменения, а затем отбросить ненужные с помощью git reset --hard или ассорти git checkout как обычно.

1 голос
/ 13 марта 2012

То, что вы, вероятно, ищете, называется интерактивным перебазированием :

git rebase -i <last_commit_you_want_to_keep>

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

Предостережение: Прежде чем вы начнете перебазирование, создайте временную ветвь, переключитесь на нее и выполните ее.Таким образом, если вы что-то напутаете, вы всегда можете просто вернуться к исходному коду.

1 голос
/ 13 марта 2012

Если у вас есть управляемое количество коммитов, вы можете интерактивно перебазировать их

git rebase -i lastcommitsha1^

и отметить те, которые вам нужно отредактировать.

Если есть тонна, и изменениясценарий, используйте git filter-branch --tree-filter

...