git上午:补丁格式检测失败。 git 申请也失败
git am: Patch format detection failed. git apply also fails
我正在尝试学习 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
我想可能是补丁和repo在同一个目录,所以我把它移到了另一个目录。结果是一样的
我也注意到很多人的命令里有一个<
,所以我试了一下:git am < ..\changes.patch
。显然这不是有效的语法。
这是在 Windows 上使用 64 位 git 和 PowerShell。
有什么想法吗?
你想从 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
中包含的关于两个分支的 共同祖先 的更改。
尝试cat .\changes.patch | git am
。
但我不知道为什么 git am .\changes.patch
不能工作。
更新:
changes.patch
默认为 USC-2 Little Endian
。将其更改为 UTF-8
后,git am .\changes.patch
有效。
我正在尝试学习 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
我想可能是补丁和repo在同一个目录,所以我把它移到了另一个目录。结果是一样的
我也注意到很多人的命令里有一个<
,所以我试了一下:git am < ..\changes.patch
。显然这不是有效的语法。
这是在 Windows 上使用 64 位 git 和 PowerShell。
有什么想法吗?
你想从 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
中包含的关于两个分支的 共同祖先 的更改。
尝试cat .\changes.patch | git am
。
但我不知道为什么 git am .\changes.patch
不能工作。
更新:
changes.patch
默认为 USC-2 Little Endian
。将其更改为 UTF-8
后,git am .\changes.patch
有效。