Git 如何选择从一个文件到另一个文件的更改?
我有两个文件名为Git 如何选择从一个文件到另一个文件的更改?,git,cherry-pick,git-cherry-pick,Git,Cherry Pick,Git Cherry Pick,我有两个文件名为vvn.c和aq.c 我对vvn.c做了更改,我的git中有这个提交。 如何选择对aq.c 唯一的区别是API的 vvn.c包含API作为vvn\u函数名称() 而aq.c包含API作为unions\u function\u names() 我不知道怎么做。 我知道cherry也在同一个文件中。 有什么方法可以做到这一点吗?不完全是cherry pick,但您可能需要使用: git签出--filename 这将根据文件在另一个分支中的版本签出该文件;如果它满足您的需要(即,如果您
vvn.c
和aq.c
我对vvn.c
做了更改,我的git中有这个提交。
如何选择对aq.c
唯一的区别是API的
vvn.c
包含API作为vvn\u函数名称()
而aq.c
包含API作为unions\u function\u names()
我不知道怎么做。
我知道cherry也在同一个文件中。
有什么方法可以做到这一点吗?不完全是cherry pick,但您可能需要使用:
git签出--filename
这将根据文件在另一个分支中的版本签出该文件;如果它满足您的需要(即,如果您不需要实际合并来自两个单独分支的文件更改),那么它是最简单的解决方案
另一种可能是生成diff(您可以从一系列提交中生成diff,并将其限制为一个文件),然后应用diff。签出:基本上,您需要对vvvn.c
更改进行diff,并将其应用于aq.c
。例如,参见此处:
然而,这是一件相当棘手的事情。为什么您有不同的文件名,但无论如何都是相似的,所以您应该进行相同的更改
也许最好能想出另一种方法。例如,对于C,您可以使用#包含公共部分并将其提取到单独的文件中。另一个更容易保留原始提交的作者信息的选项:
git cherry pick
正常
git mv
git提交--修改
以修改提交
如果原始形式的提交将修改存储库中已经存在的文件,那么您可能需要几个额外的步骤(我没有测试这部分):
git签出--孤立临时工/樱桃拣选
()
git重置
- 按照第一组步骤应用提交
- 最后切换回原始分支并
git cherry pick temp/cherry pick
我使用补丁文件。这样,我可以编辑修补程序文件中的路径以匹配新位置
您可以使用以下工具创建修补程序文件:
git格式修补程序{commit}~1…{commit}
这将在本地目录中生成带有更改的.patch
文件
-或-
git show{commit}>{my changes.patch}
其中{my changes.patch}
是您确定的文件名/路径
现在在编辑器中编辑{my changes.patch}
文件,并用新路径替换旧路径。此时可以进行其他编辑或更改
现在,您可以通过以下方式应用修补程序:
git-am<{my-changes.patch}
如果您编辑了某些内容并破坏了修补程序,您将得到一个错误。请检查可能进行的步骤和编辑,然后重试。此方法的一个优点是,如果愿意,您可以在编辑中重置、撤消部分编辑或整个文件。但是,所应用的更改没有用户输入错误,因为git是根据原始更改进行合并的
重要的是,在提交更改之前,区分您所做的更改,并确保它们是您想要的然后阶段化并提交
注意:gitam
有一系列的选项,比如--忽略空白
和--交互式
,它们可以帮助你。你能举一个关于第一个的例子吗?在你的例子中,它可能是这样的:git签出分支,其中aq发生了变化--aq.c
Hmm。我在同一个分支中有两个文件vvn.c
和aq.c
位于不同的目录中。那么现在如何签出呢?据我所知,您只想签出另一个分支的一个文件。。如果是这样的话,您就不必关心vvn.c了,您只需从提交中执行此操作,该文件位于正确的版本中。。?这真的是你想要的答案。如果还有其他人在这里,应该提到