Answers:
根据要实现的目标,您有不同的选择:
如果希望文件的内容与目标分支上的相同,则可以使用git checkout <branch> -- <filename>。但是,这不会“挑剔”一次提交中发生的更改,而只是获取所述文件的结果状态。因此,如果您在提交中添加了一行,但是以前的提交进行了更多更改,而您只想添加该行而不进行其他更改,那么结帐就不是您想要的。
否则,如果您要将提交中引入的补丁仅应用于单个文件,则可以有多个选项。您可以运行git cherry-pick -n,即不提交就编辑提交(例如使用重置所有文件,git reset -- .而仅使用实际添加要更改的文件git add <filename>)。或者,您可以为文件创建差异,然后应用差异:
git diff <branch>^..<branch> -- <filename> | git apply
创建一个patch file并应用它。
git diff branchname -- filename > patchfile
git apply patchfile
编辑:
由于您需要从提交中进行更改,因此请创建补丁,如下所示:
git show sha1 -- filename > patchfile
git diff sha1(或者git diff branch-如果分支指向相同的散列,则是相同的)将仅产生与该散列相关的当前工作目录的差异,而不会产生自己更改引入的更改。
git checkout带有文件名的-1 是此钉子的正确锤子。这两个选项都不必要地复杂。
checkout则将不起作用,因为它可能涉及其他先前不需要的更改,并且可能不包含在当前分支中所做的更改。
git checkout the_branch_with_the_change the/path/to/the/file/you/want.extension
如果您希望将另一个分支中的单个文件复制到当前工作分支中,则此方法有效