Начиная с Git 2.17 (март 2018 г.), вам не нужно использовать rebase-apply
.
Новая опция --show-current-patch
дает конечному пользователю возможность применить diff
, когда git rebase
(и git am
) останавливается из-за конфликта.
См. фиксацию fbd7a23, зафиксировать 6633529, совершить 984913a (11 февраля 2018 г.), автор: Нгуен Тай Нгок Дуй (pclouds
).
< sup> (объединено Junio C Hamano - gitster
- в commit 9ca488c, 06 марта 2018 г.)
am
: добавить --show-current-patch
Подписано: Нгуен Тхай Нгок Дуй
Указание пользователю на $GIT_DIR/rebase-apply
может побудить его возиться там, что не очень хорошо.
При этом пользователю не нужно где-то сохранять путь (потому что после пары команд путь может выйти за пределы буфера обратной прокрутки), когда ему нужно посмотреть на патч.
Дополнительные сведения см. На странице Показать текущую операцию интерактивного перебазирования git
Пример:
C:\Users\VonC\repo\src>git rebase origin/master
First, rewinding head to replay your work on top of it...
Applying: change code
Using index info to reconstruct a base tree...
M a/src/file
Falling back to patching base and 3-way merge...
Auto-merging a/src/file
CONFLICT (content): Merge conflict in a/src/file
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch' to see the failed patch <======
Patch failed at 0001 change code
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
Тогда вы получите:
C:\Users\VonC\rep\src>git am --show-current-patch
commit xxx (master)
Author: VonC <[email protected]>
Date: Mon Nov 4 13:59:18 2019 +0100
change code
diff --git a/a/src/file b/a/src/file
index yyy..zzz 100644
--- a/a/src/file
+++ b/a/src/file
@@ -13,5 +13,5 @@ file: /a/src
content line 1
content line 2
content line 3
content line 4
-content line 5
-content line 6
+content bis line 5
+content bis line 6
git am --short-current-patch
- это способ показать часть сообщения электронной почты для остановленного шага, который не подходит для прямой подачи git apply
(он разработан как хороший git am
ввод).
В Git 2.26 (первый квартал 2020 г.) появилась новая возможность отображать только часть патча.
См. фиксацию aa416b2, совершить f3b4822, e8ef1e8, совершить bc8620b, совершить 62e7a6f (20 февраля 2020 г.) от Паоло Бонзини (bonzini
).
(Объединено Junio C Hamano - gitster
- в фиксации 0e0d717, 09 мар 2020 г.)
am
: support --show-current-patch = diff для получения .git / rebase -применить / патч
Автор: Дж. Брюс Филдс
Подписан: Паоло Бонзини
Когда git am --show-current-patch
был добавлен в commit 984913a210 (am
: add --show-current-patch , 2018-02-12, Git v2.17.0-rc0 - объединить, перечисленные в пакет № 7), git am
начал рекомендовать его в качестве замены .git/rebase-merge/patch
.
К сожалению, это предложение несколько ошибочно; например, вывод git am --show-current-patch
не может быть передан в git apply
, если он закодирован как quoted-printable или base64.
Добавьте новый режим в git am --show-current-patch
, чтобы исправить предложение.
новый режим - это <сильный > diff
:
--show-current-patch[=(diff|raw)]
:
Показать сообщение, на котором git am
остановился из-за конфликтов.
Если указан raw
, показать необработанное содержимое сообщения электронной почты; если diff
, показывать только часть различий.
По умолчанию raw
.
И:
am
: поддержка --show-current-patch=raw
как синонима --show-current-patch
Подписано: Паоло Бонзини
Чтобы упростить операции с рабочим деревом и избежать попадания пользователей в .git
, было бы лучше, если бы git am
также предоставил режим, который копирует .git/rebase-merge/patch
в стандартный вывод.
Одна из возможностей может заключаться в том, чтобы иметь полностью отдельные параметры, вводя, например, --show-current-message
(для .git/rebase-apply/NNNN
) и --show-current-diff
(для .git/rebase-apply/patch
), при этом, возможно, исключая --show-current-patch.
Это даже устранило бы необходимость в первых двух патчах серии. Однако длинный общий префикс не позволил бы использовать сокращенный вариант, такой как --show
.
Поэтому я решил вместо этого добавить строковый аргумент к --show-current-patch
.
person
VonC
schedule
04.11.2019
git am --show-current-patch
. См. мой ответ ниже. - person VonC   schedule 04.11.2019