我在窗户上.
由于各种原因,我们有多个不同svn分支的git实例.
很多时候我想修复存储库A中的问题,生成补丁并将其应用到存储库B.除非存在冲突,否则这种方法很好.
重新定位时,我只需右键单击该文件夹并使用tortioseGit并选择解析选项.这带来了一个很好的gui,让我解决我的冲突.
有没有办法用拒绝的补丁块完成这个?
这是我目前创建/应用补丁的方法
git format-patch master --stdout > c:\\patch\\file.patch
git apply --reject --ignore-space-change --ignore-whitespace c:\\patch\\file.patch
Run Code Online (Sandbox Code Playgroud) 我有两个存储库.在其中一个,我对文件进行了更改./hello.test.我提交更改并使用该提交创建补丁git format-patch -1 HEAD.现在,我有一个第二个存储库,其中包含一个与hello.test具有相同内容的文件,但是以不同的名称放在另一个目录中:./blue/red/hi.test.如何将上述补丁应用于hi.test文件?我试过,git am --directory='blue/red' < patch_file但当然抱怨文件名称不一样(我认为Git并不关心?).我知道我可以编辑差异以应用于该特定文件,但我正在寻找一个命令解决方案.
当我尝试使用git am应用它时,我有一个补丁,它给出了以下输出
Checking patch old/filename...
error: old/filename: does not exist in index
Run Code Online (Sandbox Code Playgroud)
在补丁中,old/filename实际上被移动到new/filename,但似乎源树中已经缺少原始文件.
那么什么是错误以及如何解决/解决它?它可以被忽略(使用--reject等)吗?
我有两个单独的 git 存储库:A 和 B。一些存储库 B 文件已经存在于项目 A 的子文件夹中。我的目标是为存储库 B 创建补丁,然后将它们应用到存储库 A 中的子文件夹以保存存储库 B 的历史记录在合并它们的同时。问题是补丁无法创建新文件。例如:
假设此文件夹结构:/home/user/B/..bunch 目录和 /home/user/A/ext/lib/B/..bunch 目录
cd /home/用户/B
git format-patch "xx..xx" -o /home/user/A/ (创建补丁文件)
cd /home/用户/A
git apply -v --directory=ext/lib/B/ 0001-foo-12345.patch
工作正常,因为补丁没有创建任何新文件或尝试访问 B 中存在但 A 中不存在的文件夹
但
cd /home/用户/A
git apply -v --directory=ext/lib/B/ 0002-foo2-6789.patch
不起作用并抛出此错误:检查补丁 ext/lib/B/xyz/test.c... 错误:ext/lib/B/xyz/test.c:没有这样的文件或目录。
到目前为止,我已经尝试了以下命令:
git apply -v --directory=/home/user/A/lib/B/ --include=bb/cc --exclude=cc/ --exclude=bb/ --include=* 0002-foo2-6789.patch
git apply -v --directory=/home/user/A/lib/B/ --include=* --include=bb/cc --exclude=cc/ --exclude=bb/ 0002-foo2-6789.patch
git am --directory=/home/user/A/lib/B/ --include=* --include=bb/cc --exclude=cc/ --exclude=bb/ 0002-foo2-6789.patch
我有一个提交消息,[Hello World]Something.
然后我使用git format-patch HEAD~1来修补补丁.
像这样的补丁内容:
Subject: [PATCH 1/7] [Hello World] Something.
Run Code Online (Sandbox Code Playgroud)
但是在我使用git am应用补丁之后,提交消息只变成了"Something",[Hello World]似乎丢失了.
应用补丁后,如何在"[]"中保留内容?
我想从一个存储库中挑选多个提交到另一个。我按照此 Stack Overflow 帖子中提供的说明进行操作:
/path/to/2 $ git --git-dir=/path/to/1/.git format-patch --stdout sha1^..sha1 | git am -3
Run Code Online (Sandbox Code Playgroud)
并且发生了冲突:
Applying: commit-name-xxx
fatal: sha1 information is lacking or useless (path/to/conflicted/file).
error: could not build fake ancestor
Patch failed at 0001 commit-name-xxx
The copy of the patch that failed is found in: .git/rebase-apply/patch
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, …Run Code Online (Sandbox Code Playgroud) 我有理由\xc2\xb9 使用 git-format-patch 和选项创建我的 git 提交作为补丁文件--no-prefix。
此选项更改补丁输出,以不在补丁文件的文件路径中添加 git-diff 特定的前缀a// 。b/它允许应用补丁文件等工具,patch而无需作为-p1参数传递。
到目前为止一切都很酷。然而,我似乎无法再用 Git 本身(git-am)来实际应用它们:
\n\n$ git am path/to/0001-patch.patch\nApplying: <commit message subject>\nerror: <path>: does not exist in index\nPatch failed at 0001\n[...]\nRun Code Online (Sandbox Code Playgroud)\n\n我现在如何应用它们git-am,同时保持简单的patch兼容性?
\xc2\xb9 它允许我在 Bazel 中将其用作补丁文件,而无需自定义补丁命令,因为您需要使用patch -p1 [...].
我尝试使用补丁git am <my.patch,但失败了.
现在我在Git Bash中得到这个:
sashoalm@SASHOALM-PC /c/Workspace/MyProject (master|AM 1/1)
Run Code Online (Sandbox Code Playgroud)
我的提示用于显示:
sashoalm@SASHOALM-PC /c/Workspace/MyProject (master)
Run Code Online (Sandbox Code Playgroud)
因此,从失败的补丁中"遗留"了一些东西,如何完全取消它,并返回到旧的提示?
有时我需要在分支中挑选具有一定修复能力的标签,然后通过
git cherry-pick tags/myfix
Run Code Online (Sandbox Code Playgroud)
这是可行的,但是在进行“ inexact重命名检测”时,挑选樱桃的时间越来越长。
我的预感是,这样可以更快
git format-patch -k -1 --stdout tags/myfix | git am -3 -k
Run Code Online (Sandbox Code Playgroud)
实际上,事实证明,该解决方案可立即应用该修复程序,使我的分支处于与选择樱桃完全相同的状态。
现在我的问题是,摘樱桃到底有什么不同?我以为摘樱桃基本上就是这样实现的,但我一定误会了。