git am:修补程序格式检测失败. git 应用也失败



我正在尝试学习 git 修补,所以我设置了一个测试存储库并进行了一些提交。

然后我创建了一个补丁:git format-patch -1 HEAD --stdout > changes.patch

接下来,我签出了一个新的分支并尝试使用 changes.patch:git am .changes.patch。 它给了我错误Patch format detection failed.

我在这里搜索,发现了这个相关的问题。

所以我尝试git apply .changes.patch. 它给了我error: unrecognized input.

补丁文件在我未经训练的眼睛看来似乎很好:

From 1c054c05bc528afbd929a1744fcacf9d70069246 Mon Sep 17 00:00:00 2001
From: MyUsername <my.email@gmail.com>
Date: Sat, 4 May 2019 22:43:32 -0400
Subject: [PATCH] Commit 4
---
test.txt | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/test.txt b/test.txt
index 58ef11d..763fe4e 100644
--- a/test.txt
+++ b/test.txt
@@ -1,3 +1,4 @@
Initial commit
Commit 2
-Commit 3
 No newline at end of file
+Commit 3
+Commit 4
 No newline at end of file
-- 
2.21.0.windows.1

我认为补丁可能与存储库位于同一目录中,因此我将其移至另一个目录。 结果是一样的。

我还注意到很多人在命令中有一个<,所以我尝试了一下:git am < ..changes.patch. 显然这不是有效的语法。

这是在Windows上使用64位git和PowerShell。

有什么想法吗?

尝试cat .changes.patch | git am.

但我不知道为什么git am .changes.patch不能工作。

更新:

默认情况下,changes.patch处于USC-2 Little Endian状态。将其更改为UTF-8后,git am .changes.patch工作。

你想从HEAD创建一个补丁吗?然后,您可以简单地执行以下操作:

要保存修补程序:

git show HEAD > /some/location/patch.txt

要应用修补程序:

git apply /some/location/patch.txt

如果你想从一堆提交创建一个补丁,你可以这样做:

git diff OLDEST_COMMIT..NEWEST_COMMIT > /some/location/patch.txt

例如,通过这种方式,您可以创建一个包含功能分支更改的补丁:

git diff origin/master...origin/new_feature > /some/location/feature.patch

请注意这三个点,它们表示您希望origin/new_feature中包含的关于两个分支的共同祖先的变化。

最新更新