我正在尝试学习git patching,所以我设置了一个测试仓库并进行了一些提交。
然后我创建了一个补丁:git format-patch -1 HEAD --stdout > changes.patch
接下来,我签出了一个新分支并尝试使用changes.patch:git am .\changes.patch
。它给我错误Patch format detection failed.
我在这里搜索,发现this related question。
所以我尝试了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和PowerShell上使用的64位git。
有什么想法吗?
答案 0 :(得分:1)
尝试cat .\changes.patch | git am
。
但是我不知道为什么git am .\changes.patch
无法正常工作。
更新:
默认情况下, changes.patch
位于USC-2 Little Endian
中。将其更改为UTF-8
后,git am .\changes.patch
可以正常工作。
答案 1 :(得分:0)
您要从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
进行更改。