gpt4 book ai didi

git 应用 --3way : don't abort if some hunks fail

转载 作者:太空狗 更新时间:2023-10-29 13:40:27 25 4
gpt4 key购买 nike

情况

我在 repo 中提交了一个名为 testing.txt 的文件,其中包含以下内容:

First line

我正在尝试应用此补丁,它修改了两个文件,testing.txtnonexistent.txt:

diff --git a/testing.txt b/testing.txt
index 5e867b1..e5c47f2 100644
--- a/testing.txt
+++ b/testing.txt
@@ -1 +1,2 @@
Non-matching first line
+Second line from patch
diff --git a/nonexistent.txt b/nonexistent.txt
index 9649cde..8aab0eb 100644
--- a/nonexistent.txt
+++ b/nonexistent.txt
@@ -1 +1,2 @@
First line
+Second line from patch

使用这个命令:

git apply --verbose --3way patch.txt

在命令执行期间,testing.txt hunk 成功应用回退三向 merge :

Checking patch testing.txt...
error: while searching for:
Non-matching first line

error: patch failed: testing.txt:1
Falling back to three-way merge...
Applied patch to 'testing.txt' with conflicts.

并且(如预期的那样)nonexistent.txt hunk 失败(因为该文件不存在):

Checking patch nonexistent.txt...
error: nonexistent.txt: does not exist in index

问题

整个 apply 命令被中止,因为 nonexistent.txt 大块失败。

testing.txt block 的三向 merge 被丢弃,即使它是成功的。

这在 docs 中说明:

For atomicity, git apply by default fails the whole patch and does not touch the working tree when some of the hunks do not apply.

问题

我希望将成功的 testing.txt hunk 应用于文件,而不是丢弃。我该怎么做?

换句话说,如何将 nonexistent.txt fatal error 更改为非致命警告,以便 apply 命令不会中止?

(通过这个简单的示例,我可以只从补丁文件中删除 nonexistent.txt hunk,但这对于可能需要删除数百个 hunk 的大型补丁来说并不实用。 )

我尝试过的

我已经查看了 docs ,但我找不到执行此操作的选项。

--reject 选项“使它应用适用的补丁部分,并将被拒绝的 hunks 留在相应的 *.rej 文件中”,但它是与 --3way 选项不兼容。

我还尝试了 -C0--unidiff-zero(忽略所有上下文)。

最佳答案

这对我有用:

git apply --verbose --3way --exclude=nonexistent.txt patch.txt

关于git 应用 --3way : don't abort if some hunks fail,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31536889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com