Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有一种方法可以将git提交从树的一部分应用到另一部分?_Git_Cherry Pick - Fatal编程技术网

有没有一种方法可以将git提交从树的一部分应用到另一部分?

有没有一种方法可以将git提交从树的一部分应用到另一部分?,git,cherry-pick,Git,Cherry Pick,在遥远而暗淡的过去,有一个决定,要打破与我们的配置程序之一的兼容性。然而,由于仍有远程单元运行旧软件,我们需要在构建中保留旧管理软件的版本。在简短的“cp-A”之后,我们得到了一个目录结构,其中包含: mgmt-app mgmt-app.old 开发仍在继续,管理应用程序积累了大量修复程序,其中一些是新功能,一些是通用功能。正如您可能猜到的,现在注意到mgmt-app.old没有这些修复程序。如果我可以挑选相关的补丁,保留有用的东西,比如评论,但将提交应用到mgmt-app.old,那就太好了

在遥远而暗淡的过去,有一个决定,要打破与我们的配置程序之一的兼容性。然而,由于仍有远程单元运行旧软件,我们需要在构建中保留旧管理软件的版本。在简短的“cp-A”之后,我们得到了一个目录结构,其中包含:

mgmt-app
mgmt-app.old
开发仍在继续,管理应用程序积累了大量修复程序,其中一些是新功能,一些是通用功能。正如您可能猜到的,现在注意到mgmt-app.old没有这些修复程序。如果我可以挑选相关的补丁,保留有用的东西,比如评论,但将提交应用到mgmt-app.old,那就太好了。显然,它们不会正常应用,因为它们已经在应用于管理应用程序的树中了


我们使用git来控制存储库的版本。有没有办法将这些提交“后传”到树的不同部分?手动应用带有“patch-p”的修补程序就可以解决这个问题吗?

使用

为您的“旧”东西启动一个新分支:

git checkout-b old

使用
gitk
,回顾您的历史记录,并在创建
mgmt app.old
之前找到提交。确定该提交的SHA1,以及

git重置——硬


使您的
分支点变老。现在您有了一个分支,可以在开发出现分歧时使用(
git-rebase-i
)从新的/当前的开发分支中挑选(并编辑,如果需要的话)提交到这个旧分支。

我想您误解了这个问题。这些是同一分支中的提交。阅读手册页时,我看不到如何将cherry picks转换为同一棵树中的新目录。git提交!=不同的是,当您说“将git提交应用到我树的另一方”时,它指的是提交树,而不是文件系统树。这就是cherrypick所做的,将提交从提交树的一部分复制到另一部分,我认为您提出了错误的问题。您应该为这些目录使用不同的分支,甚至是存储库,而不仅仅是复制存储库中的数据。祝你的混乱存储库好运。@KurzedMetal:不幸的是,需要在同一系统版本中构建两个版本的mgmt应用程序。这是因为管理软件(可以与多个设备通信)与系统软件(当然,系统软件只管理自身)一样使用公共代码库。这种混乱通常是由于发布实际产品所需的妥协。如果我是你,我会将
mgmt
目录保存在一个存储库的不同分支中(以便能够在它们之间进行合并或cherrypick),并将公共代码保存在另一个repo中。然后,我将使用
git子模块
或viceversa(将公共代码导入每个
mgmt
目录)将两个
mgmt
目录导入到公共代码中,无论您需要什么。