Misunderstanding git cherry pick



我对git有疑问。我们一直在将自己的功能推向掌握最新提交的掌握是C2。在C1和C2之间,近10个提交。今天由于某些问题,我们不得不从Master In Master中创建一个分支,我做了以下内容:

 git branch bugfix c1

在此BugFix分支中,我作为COMM C2的一部分进行的更改必须存在。因此,我要做以下操作:

 git checkout bugfix
 git cherry-pick -x c2

安全吗?我的意思是从GIT角度来看,提交从C1 1到C2-1的任何方式可能会出现在BugFix Branch上,因为我们不希望Master Master的C1和C2之间的任何更改来到BugFix分支。

它是安全的,因为樱桃件仅采用被标识为c2的提交的更改。但是,如注释中所述,如果c2更改取决于c2c1之间的先前更改,这可能会导致问题。此外,如果c2更改不匹配您在c1中的状态(即,因为它需要以前的更改是c1c2之间的提交的一部分)。

通常,仅创建一个提交是安全的。通常,您只会通过将有问题的提交推向外部(构建)服务器来造成伤害。在您的情况下,选择樱桃后的更改可能会有所帮助。

从根本上讲, git cherry-pick的作用是将每个"樱桃"(每个樱桃)转换为一个更改集(一组差异),然后尝试将该更改应用于当前(或HEAD)提交 1 并从结果中做出新提交。

通过在该提交和其父委员会之间运行git diff获得任何一个特定提交的差异。此差异很容易获得:git show <hash>适用于任何非合并提交。(挑选合并需要指定哪个父母,因此更复杂。)因此,您可以使用git show查看git cherry-pick的更改。

请注意,如果git show显示了HEAD中不存在的文件的更改,或者对HEAD中确实存在的文件中不存在的代码区域它自己的。在这种情况下,GIT将使用完整的3向合并来对待樱桃挑选操作作为对 Merge Merge 的要求,合并基础是挑选樱桃的承诺的父母两个分支提示为HEAD--ours),并挑选了提交(--theirs)。这将使工作树中的合并冲突在过程中存储在索引中;您可以按照任何其他合并冲突来解决此问题,然后运行git cherry-pick --continue完成操作,或者git cherry-pick --abort停止并返回开始之前的事物。


1 或使用-n,仅为索引和工作树。

相关内容

  • 没有找到相关文章

最新更新