Перед вопросом немного предыстории:
Итак, в основном я делал серьезное обновление комментариев в огромном количестве исходных файлов в одном из моих проектов и добавил краткое описание каждого файла в виде комментария вверху файлов (вместе с множеством комментариев внутри самого кода) .
Затем я решил, что выполнив это и сделав это, я добавлю дополнительную информацию в дескрипторы, такие как автор, дата и т. Д. Итак, живя на грани, я решил найти и заменить в файлах, используя регулярное выражение, чтобы выбрать полное содержимое файл и замените его дополнительной информацией в заголовках, сохраняя все, что раньше было в файле. Поскольку я работаю в Verilog, в конце каждого файла стоит endmodule
, поэтому я использовал его в качестве маркера, чтобы убедиться, что я получил все в регулярном выражении.
К сожалению, я забыл добавить endmodule
обратно в строку замены, поэтому в основном в нескольких сотнях исходных файлов я потерял строку в конце. Это не было большой проблемой, их было легко найти-заменить, чтобы вернуть их обратно. Урок выучен.
Как бы то ни было, я сначала этого не осознавал, поэтому около часа группирую исходные файлы в серию коммитов в моем репозитории на github. К счастью, я заметил проблему endmodule
перед отправкой этих коммитов в источник, поэтому я смог удалить коммиты с помощью команды git reset --soft HEAD~4
, чтобы избавиться от моих 3 коммитов.
Прежде чем я это сделал, я использовал команду git show
, чтобы получить описания фиксации и список файлов, включенных в каждую фиксацию, которые я теперь сохранил в текстовом файле. Я надеялся использовать их для воссоздания коммитов, вернув все теги endmodule
.
Но мои возможности Google подводят меня сегодня вечером, так как я не могу найти способ сделать фиксацию, содержащую все изменения из списка файлов. В идеале мне нужна какая-то команда, которую я могу запустить в оболочке git (Windows Powershell), которая, возможно, прочитает текстовый файл, содержащий список файлов. Затем я хочу, чтобы все эти файлы были добавлены в новую фиксацию с тем же сообщением и расширенным описанием, что и раньше (их я могу просто скопировать и вставить в любую команду).
Есть ли какой-либо способ сделать это, являющийся частью git, или мне нужно проявить творческий подход со сценариями PowerShell?
Из этого SO-вопроса я вижу, что вы можете использовать git commit [files]
для создания новой фиксации только определенных файлов. Я предполагаю, что могу добавить переключатель -m, чтобы добавить сообщение, как обычно. Но как трубу в списке файлов заменить [files]
.
На данный момент я только что взял свой список, вручную превратил его в строку и вставил в команду, которая сработала для меня. Но как вы можете видеть на изображении ниже, это явно очень некрасиво.
Я уверен, что должен быть более аккуратный способ сделать это, поэтому, хотя моя проблема теперь исправлена, я все же хотел бы знать для справок в будущем, можно ли выполнить команду, в которой заполнитель [files]
заменяется содержимым файла, который содержит имя файла в каждой строке.
git add -u
добавит все файлы для фиксации, которые а) уже отслеживаются и б) были изменены с момента последней фиксации. - person twalberg   schedule 29.04.2015