需求:目前有一个开发分支dev,然后要在dev分支的基础上,检出两个新的分支,做为发版分支,这个分支的功能完全一样,只有logo,title,项目的配置信息不同。怎么在dev分支上开发了新的功能之后,合并到这两个发版分支,并不覆盖这两个分支中的项目配置信息。
步骤过程如下:
- 首先新建了一个git仓库
- 添加文件 a.js
console.log('a');
提交记录:添加a文件 - 在该提交记录的基础上检出新分支 【dev】
- 添加文件 b.js
console.log('b');
提交记录:添加b文件 - 在 a.js文件中添加内容如:
console.log('a'); console.log('new_a');
- 在此基础上检出新分支 【new_a】
- 然后重新切换到【dev】分支,并修改a文件
console.log('a'); console.log('new_a'); console.log('new_b');
- 在此基础上检出新分支 【new_b]
- 此时
【new_a]分支下的a文件的内容如下:
【new_b】分支下的a文件的内容如下:console.log('a'); console.log('new_a');
【dev】分支下的a文件的内容如下:console.log('a'); console.log('new_a'); console.log('new_b');
console.log('a'); console.log('new_a'); console.log('new_b');
需求:此时,我想在【dev】分支上新开发功能,然后只将改动的新功能分别合并到【new_a】分支 和 【new_b】分支。
-
如果此时,我在【dev】分支上开发了新的功能,如新建 c.js 文件
console.log('c');
提交记录:添加c文件 -
然后分别合并到【new_a】分支【new_b】分支,此时,虽然新开发的功能 c 文件合并过来了,但是【new_a】分支中的 a 文件就会被覆盖。
a文件内容变化如下:
【dev】分支 合并 marge 到【new_a】分支之前:console.log('a'); console.log('new_a');
【dev】分支合并 marge 到 【new_a】分支之后:a文件内容
console.log('a'); console.log('new_a'); console.log('new_b');
这样,就不符合我的需求。我只想将记录:提交c文件,这个更改到【new_a】分支和【new_b】分支。
-
这个时候,就要用到 遴选 这个功能。而不是直接采用 合并
SourceTree中的操作如下:
在【new_a】分支下,选中该条要遴选的这条提交记录(该条记录是在【dev】分支上提交的记录),如步骤10
然后鼠标右击,点击遴选。
然后点击确定。 -
此时,【new_a】分支上就有了刚刚【dev】分支的提交记录,而不会覆盖 a 文件的内容,此时,a文件的内容为:文章来源:https://www.toymoban.com/news/detail-769874.html
console.log('a'); console.log('new_a');
多个提交记录cherry-pickgit cherry-pick <commit-id>
使用命令git log
查看commit-id
一次可以将一个连续的时间序列内的commit,设定一个开始和技术的commit,进行cherry-pick操作git cherry-pick <start-commit-id>...<end-commit-id>
这样就可以将start-commit-id到end-commit-id之间所有的commit都遴选提交了,但这个是左开右闭的区间,不包含开始的提交id,要想包含使用git cherry-pcik <start-commit-id>^...<end-commid-id>
使用^标记一下。
使用git log —pretty=oneline
来查看当前分支最近的提交,注意,git命令中,对于commit-id的操作,都只需要使用前五位就可以了。
如 git cherry-pick c3d25^...9f19f
文章来源地址https://www.toymoban.com/news/detail-769874.html
到了这里,关于git的cherry-pick,使用SourceTree遴选的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!