Используйте git apply, чтобы объединить патч с патчем.

Git GitLab
Используйте git apply, чтобы объединить патч с патчем.

предисловие

Когда я был новичком в git, я часто сталкивался с неловкой ситуацией.Гитовый склад часто ломался сам.Хоть он и не был исчерпан, но хотелось влепить себе бэкхенд.

Импульс — это дьявол, нам еще предстоит решить проблему, не так ли?Конечно, есть много методов сброса, и эта статья также предоставит вам новую идею решения проблемы.

инструкции

Познакомьтесь с GIT DIFF

git diffМы используем слишком много команд.По умолчанию возвращаются подробные различия между файлами в рабочей области и в тестовой области.

В чем детальные различия?

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

Конечно,git diffОн не только может обеспечить сравнение файлов между рабочей областью и промежуточной областью, можно сказать, что он может предоставить любые различия файлов, как показано ниже:

  1. git diff filepath сравнивает рабочую область с файлом в промежуточной области.
  2. git diff HEAD filepath Рабочая область сравнивается с HEAD (текущая рабочая ветка), HEAD также можно заменить на любой commitID
  3. git diff --staged или --cached путь к файлу сравнить промежуточную область с HEAD
  4. git diff имя_ветви путь к файлу Сравнить файлы текущей ветки с файлами ветки имя_ветви
  5. git diff commitId путь к файлу для сравнения с фиксацией
  6. Сравнение файлов git diff commitID1 commitID2 между двумя коммитами

Тогда я подумал, а не было бы здорово иметь возможность восстанавливать файлы на основе этой информации?Конечно, я точно не первый человек, который так умён, git уже предоставил соответствующие команды, и смотрите вниз.

Создание патчей PATCH

патч патч основан наgit diffСгенерированный файл с текстовым содержимым, самый простой способ его создания:git diff > test.patch.

где тест. Файл исправления записывает все ваши изменения на этот раз, если вы забудетеgit stash, или принудительноgit reset --hard HEAD, этот файл будет последней каплей.

GIT APPLY

Основное использованиеgit apply patch, который добавляет или удаляет содержимое из существующего файла на основе информации в файле исправления.

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

Пример

Предварительно генерируем текстовый файл text, содержимое которого выглядит следующим образом и отправляем коммит, в рабочей и staging области содержимого нет:

origin context line1
origin context line2

Измените его на:

origin context line1
origin context
add line

использоватьgit diff > test.patchСгенерируйте патч-патч, конечно, вы можете поместить этот файл в любую директорию, открыть его содержимое следующим образом:

diff --git a/test b/test
index ce2f4b3..ae27ef5 100644
--- a/test
+++ b/test
@@ -1,2 +1,3 @@
 origin context line1
-origin context line2
+origin context
+add line

Затем мы используемgit checkout .сбросить файлы в исходное состояние, текстовые файлы обратно в

origin context line1
origin context line2

использоватьgit apply test.patch, снова запишите изменения, просмотрите текстовый файл и измените обратно

origin context line1
origin context
add line

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

Еще нужно сказать, что git apply — это команда транзакционной операции, при наличии конфликтующих изменений все модификации будут отменены, и можно будет добавить параметр --reject.

применение

Я так много говорил раньше, кто-то опровергнет, здесь я использую другие команды, такие какgit stash,git rebaseОн намного сильнее тебя, эта команда очень безвкусна и бесполезна~

Удобство этой команды продемонстрировано ниже на двух наглядных примерах.

举个栗子

Скачать контент MR с помощью патча

Этот метод исходит от коллеги по отделу, интересного человека, который часто приносит мне всякие фантастические идеи, здесь я также одалживаю цветы, чтобы предложить Будде. (Чтобы получить эту идею, чтобы иметь возможность написать статью, я тайно дал ему 10 юаней за авторизацию)

Студенты, которые часто используют gitlab, знают, что когда другие отправляют MR в основную библиотеку, вы можете только проверить код и не можете напрямую загрузить измененное содержимое файла, чтобы проверить правильность кода, прежде чем MR будет объединен.

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

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

Ключевым моментом здесь является то, как получить патч-патч, который сравнивает этот MR с существующими файлами в основной библиотеке, но gitlab уже просмотрел все ваши осторожные мысли~

Нажмите «Платчи по электронной почте», вы можете напрямую загрузить файл исправления, а затем выполнить указанные выше действия.git applyЗагрузите измененный контент прямо на локальный сервер, а затем с радостьюyarn startИли другие команды для запуска вашего проекта, чтобы проверить эффект, так хорошо!

совместная работа нескольких человек

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

А в это время дом течет под дождем, и VPN не может подключиться к интранету компании.Вам не повезло, как вы можете это исправить?!

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

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

В это время ничего не теряйте, git diff, чтобы сделать проход в прошлом, воспевая патч, патч, изменение содержимого ошибки, как правило, минимальное, менее 1 КБ ......

Здесь также видно, что самым большим преимуществом патч-патча является то, что контент небольшой, и он может записывать только измененный контент, а не весь файл.git applyЛучше просто быть не может~

Пополнить

Вот еще две похожие команды:git format-patch commitA commitBиgit am.

Первый также принесет всю информацию о коммите, такую ​​как автор, время, описание узла и т. д., а затем будет сотрудничать со вторым, чтобы применить содержимое патча к текущей ветке. иgit applyРазница в том, что патч здесь уже не только в рабочей области, вы найдете запись коммита между commitA и commitB текущей ветки. Для получения подробной информации, пожалуйста, изучите его самостоятельно ~


Обратите внимание на публичный аккаунт WeChat: KnownsecFED, получайте больше качественной галантереи по коду!