Как мне вставить строку перед самым большим изменением в git commit

#git

#git

Вопрос:

У меня есть документ Markdown, и я хочу вставить привязку с идентификатором, чтобы при ее преобразовании в HTML я мог сразу перейти к самому большому изменению (которое обычно является окончательным изменением коммита — большинство изменений — это большие добавления, а более ранние исправления — исправления опечаток).

Я попытался проверить HEAD~1 , добавив тег привязки, спрятав его, проверив, HEAD а затем вытащив тайник, но это просто привело к обычному конфликту слияния. беспорядок.

Комментарии:

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

2. ДА. По сути <a id="todays-date"></a> , предшествующее новому контенту.

Ответ №1:

Вы можете написать инструмент, который сканирует разницу (сгенерированную git diff or git show или …) и определяет фрагмент с наиболее измененными строками.

Все фрагменты различий обозначаются строкой, имеющей вид :

 @@ -148,28  170,85 @@
  

В приведенной выше строке 148 и 170 являются номерами строк (ссылающимися на «lineno в исходном файле» и «lineno в конечном файле»),
количество изменений обозначается 28 и 85 (грубо говоря: diff вычислил, что вы можете применить исправление, которое удаляет 28 строк и добавляет 85 строк).


Вы можете либо взять последний упомянутый фрагмент, либо использовать номер строки последнего фрагмента :

 git show -p -- MyFile.md | grep "^@@ -" | tail -1
  

или обработать все упомянутые фрагменты и написать скрипт для печати lineno «самого большого фрагмента».


Способ группировки блоков зависит от -U<count> параметра (количество строк контекста), попробуйте переключить этот регулятор (попробуйте git diff/git show с -U1 помощью , -U2 , -U5 … ), Чтобы увидеть, какое значение лучше всего подходит для вашего варианта использования.