如何从一个文件中挑选更改到另一个文件



我有两个名为vvn.caqu.c的文件我对vvn.c进行了更改,并在git中进行了提交。如何挑选与aqu.c相同的更改唯一的区别是API的。

vvn.c包含API作为vvn_function_names()

aqu.c包含作为unions_function_names()的API

我不知道该怎么做。我知道在同一个文件里挑选樱桃。有办法做到这一点吗?

不完全是樱桃采摘,但您可能想使用:

git checkout <branch or sha of commit> -- filename

这将按文件在另一个分支中的版本签出该文件;这是最简单的解决方案,如果它满足您的需求(即,如果您不需要实际合并来自两个独立分支的文件更改)

另一种可能性是生成diff(你可以从一系列提交中生成diff,并将其限制为一个文件),然后应用diff。看看:如何在同一分支上的两个不同提交之间对同一文件进行diff?

基本上,您需要对vvn.c的更改进行差异处理,并将其应用于aqu.c。例如,请参阅此处:如何将Git补丁应用于具有不同名称和路径的文件?

然而,这是一件相当棘手的事情。为什么你们有不同的文件名,这些文件名无论如何都很相似,所以你们应该做出相同的更改?

也许最好想出另一种方法。例如,对于C,您可以使用#include并将公共部分提取到一个单独的文件中。

另一个更容易保存原始提交的作者信息的选项:

  • git cherry-pick正常
  • git mv文件到位
  • git commit --amend修改樱桃选择的提交

如果原始形式的提交会修改存储库中已经存在的文件,那么您可能需要几个额外的步骤(我还没有测试过这一部分):

  • git checkout --orphan temp/cherry-pick(参考文献)
  • git reset
  • 按照第一组步骤应用提交
  • 最后切换回原来的分支和git cherry-pick temp/cherry-pick

我使用了一个补丁文件。通过这种方式,我可以编辑修补程序文件中的路径以匹配新位置。

您可以创建一个补丁文件:

git format-patch {commit}~1...{commit}

这会在本地目录中生成一个带有更改的.patch文件。

-或-

git show {commit} > {my-changes.patch}

其中{my-changes.patch}是您确定的文件名/路径。

现在在编辑器中编辑{my-changes.patch}文件,并用新路径替换旧路径。此时可以进行其他编辑或更改。

现在你可以用应用补丁

git am < {my-changes.patch}

如果您编辑了某些内容并破坏了补丁,则会出现错误。请检查可能的步骤和编辑,然后重试。这种方法的一个好处是,如果您愿意,您可以重置、撤消编辑中的部分或整个文件。但是,应用的更改没有用户输入错误,因为git是从原始更改进行合并的。

重要的是在提交更改之前,请对所做的更改进行区分,并确保它们是您想要的只有在阶段并提交它们。

注意:git am有很多选项,比如--ignore-whitespace--interactive,可以帮助您。

相关内容

  • 没有找到相关文章

最新更新