Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.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_Github_Cherry Pick - Fatal编程技术网

Git 如何挑选选定的提交集?

Git 如何挑选选定的提交集?,git,github,cherry-pick,Git,Github,Cherry Pick,我想选择一组特定的提交,将其挑选到一个新的分支 main-branch * commit8 * commit7 * commit6 * commit5 * commit4 * commit3 * commit2 * commit1 我只想创建一个包含选定提交的发布分支 release-branch * commit7 * commit6 * commit4 * commit2 * commit1 是否可以将所需提交的标记关联起来,并编写脚本以将提交与特定标记关联起来?tl;dr:使用git-

我想选择一组特定的提交,将其挑选到一个新的分支

main-branch
* commit8
* commit7
* commit6
* commit5
* commit4
* commit3
* commit2
* commit1
我只想创建一个包含选定提交的发布分支

release-branch
* commit7
* commit6
* commit4
* commit2
* commit1

是否可以将所需提交的标记关联起来,并编写脚本以将提交与特定标记关联起来?

tl;dr:使用git-rebase-i可能更好

我想我看不出你期望从标签中得到什么。避讳

git cherry-pick commit
对于每一个承诺,你都会说

git tag my_tag commit
然后仍然需要实际运行脚本来复制提交。。。这不仅仅是手工做的工作。另外,上面的标记命令不会像您希望的那样工作,因为给定的标记正好指向一个对象;因此,您必须使用许多标记,并让您的cherry pick脚本找到所有标记

这并不是说手工采摘樱桃是最好的方式。樱桃采摘的重点是抓住我需要的一个变化;如果您需要处理整个分支,那么使用git rebase可能更容易。重基操作经常被误解;它是复制的,很像樱桃树。人们似乎常常认为,它取代了承诺,删除了原始内容;事实并非如此。它可以改变一个ref的历史记录,但这就是它的范围

例如,如果你从

A -- B -- C -- D -- E -- F -- G -- H <--(main-branch)
我使用master~6是因为它是一个表示B的表达式;B的对象ID散列也可以工作。我选择B是因为C是您不想保留的第一个提交-因此重写在B之后开始。如果您想删除A,可以使用解析为A的父级的表达式(如果A有父级),或者使用-root(如果A没有父级)

现在git将打开一个编辑器,向您显示一个todo列表,在您的分支中,每个提交返回一行,但不包括B。对于要删除的提交,请将该提交行上的第一个单词从pick更改为drop,或者删除该行

当您退出编辑器时,重基操作将开始复制提交,即在新基础上应用相同更改的新提交。在每个步骤中,如果稍后提交中的更改取决于您删除的先前提交中的更改,则可能会发生冲突;系统将提示您解决这些问题并继续重设基础操作

当它完成时,你将有

A -- B -- C -- D -- E -- F -- G -- H <--(main-branch)
      \
       D' -- F' -- G' <--(release-branch)
其中D'应用与D相同的变更,等等


这并不是没有潜在的缺点,尽管这些缺点对于rebase和cherry pick是一样的;这真的取决于你将如何处理这里的树枝。若释放分支只是一个终端状态,您将释放并忘记它,那个么它可能很好。如果您可能需要热修复发布,您会发现在发布分支和主分支之间进行合并可能会很困难;因此,您可能必须使用cherry pick或rebase在发行版和主开发线之间共享修复;dr:使用git-rebase-i可能更好

我想我看不出你期望从标签中得到什么。避讳

git cherry-pick commit
对于每一个承诺,你都会说

git tag my_tag commit
然后仍然需要实际运行脚本来复制提交。。。这不仅仅是手工做的工作。另外,上面的标记命令不会像您希望的那样工作,因为给定的标记正好指向一个对象;因此,您必须使用许多标记,并让您的cherry pick脚本找到所有标记

这并不是说手工采摘樱桃是最好的方式。樱桃采摘的重点是抓住我需要的一个变化;如果您需要处理整个分支,那么使用git rebase可能更容易。重基操作经常被误解;它是复制的,很像樱桃树。人们似乎常常认为,它取代了承诺,删除了原始内容;事实并非如此。它可以改变一个ref的历史记录,但这就是它的范围

例如,如果你从

A -- B -- C -- D -- E -- F -- G -- H <--(main-branch)
我使用master~6是因为它是一个表示B的表达式;B的对象ID散列也可以工作。我选择B是因为C是您不想保留的第一个提交-因此重写在B之后开始。如果您想删除A,可以使用解析为A的父级的表达式(如果A有父级),或者使用-root(如果A没有父级)

现在git将打开一个编辑器,向您显示一个todo列表,在您的分支中,每个提交返回一行,但不包括B。对于要删除的提交,请将该提交行上的第一个单词从pick更改为drop,或者删除该行

当您退出编辑器时,重基操作将开始复制提交,即在新基础上应用相同更改的新提交。在每个步骤中,如果稍后提交中的更改取决于您删除的先前提交中的更改,则可能会发生冲突;系统将提示您解决这些问题并继续重设基础操作

当它完成时,你将有

A -- B -- C -- D -- E -- F -- G -- H <--(main-branch)
      \
       D' -- F' -- G' <--(release-branch)
其中D'应用与D相同的变更,等等

这并非没有潜在的缺点,尽管dra
wbacks对于rebase和cherry pick是一样的;这真的取决于你将如何处理这里的树枝。若释放分支只是一个终端状态,您将释放并忘记它,那个么它可能很好。如果您可能需要热修复发布,您会发现在发布分支和主分支之间进行合并可能会很困难;因此,您可能必须使用cherry pick或rebase在发行版和主开发线之间共享修复程序。

听起来像是人们会使用git rebase-i的案例之一。听起来像是人们会使用git rebase-i的案例之一。谢谢杜德:谢谢杜德: