我正在使用git-am在我的存储库顶部应用diff file一个开源项目:
git am -3 < /Downloads/refactorWork.diff
但它有冲突,我必须解决它们;但是在解决冲突和分期之后,当我做了git am - 继续我得到了:
fatal : empty ident name (for <>) not allowed
我在互联网上查找并发现this似乎与我的问题相似,但我的用户名和电子邮件已经在全局和本地git目录中添加了。这是git config list的输出:
rohan@~/Documents/libo : $ git config --global --list
user.email=rohankanojia420@gmail.com
user.name=Rohan Kumar
alias.l=log --oneline --graph --pretty
credential.helper=cache
虽然我通过首先提交分阶段更改然后使用git am --skip
来解决这个问题,但我有兴趣知道这个错误意味着什么,以及我所做的是正确的做法,还是有更好的方法方式是什么?
答案 0 :(得分:21)
这个差异文件是一个简单的差异,而不是由git format-patch
生成的东西。 format-patch
生成的diff包含有关提交作者,作者日期,提交消息等的信息,并在创建提交时维护此信息。
您的普通差异没有这些信息,因此git am
会抱怨它自然丢失。
你应该使用git apply
,这意味着应用简单的补丁文件,就像你在这种情况下一样,它只会将补丁应用到工作树(如果你告诉它,还有索引),但不会创建任何补丁文件自动提交。
答案 1 :(得分:1)
将评论移至已接受的答案
当您在TortoiseGit中点击“保存统一差异”时,您必须右键单击创建的.diff
或.patch
文件,然后选择TortiseGit→Review/apply single patch
而不是Apply Patch Serial...
。
首先将diff文件放在要将修补程序应用到的文件夹的根目录中。
答案 2 :(得分:1)
使用
git apply -3 patchName.patch
遇到冲突时,请打开mergtool并解决冲突
git mergetool
仅此而已:)
答案 3 :(得分:0)
我有一个看起来非常好的补丁,包括提交消息、作者:标题等。
我比较了 git-format-patch 的输出,发现它使用了 From: headers 而不是 Author: headers。
果然,如果您将 Author: 更改为 From:,git-am 会干净地应用更改。