git cherry-pick合并某一个或一些版本到某一个分支

1.命令

#单独合并一个提交
git cherry-pick commitHash
#同上,不同点:保留原提交者信息。
git cherry-pick -x commitHash
#Git从1.7.2版本开始支持批量cherry-pick,就是一次可以cherry-pick一个区间的commit。
#start-commitHash到end-commitHash之间(左开右闭,不包含start-commitHash)的提交cherry-pick到当前分支;
git cherry-pick start-commitHash..end-commitHash
#有"^"标志的表示把start-commitHash到end-commitHash之间(闭区间,包含start-commitHash)的提交cherry-pick到当前分支。
git cherry-pick start-commitHash^..end-commitHash

其中,start-commitHash到end-commitHash只需要commitHash的前6位即可,并且start-commitHash在时间上必须早于end-commitHash

以上合并,需要手动push代码。

2.提交

主分支master,另外还有个开发dev,想增加一个dev版本中的功能到master中,这里就可以使用cherry-pick了,其实也就是对已经存在的commit 进行再次提交.

#切换到master
git checkout master
#
git cherry-pick 47690cc5c # 47690cc5c,是dev中的版本

如果顺利,就会正常提交。结果:

如果在cherry-pick 的过程中出现了冲突

就跟普通的冲突一样,手工解决合并冲突

# 看哪些文件出现冲突
git status

第一步将(git add .),第二步使用下面的命令,让 Cherry pick 过程继续执行。

#解决代码冲突后,
vim file_name
#修改的文件重新加入暂存区
git add file_name
#再次执行 参数有(--continue | --quit | --abort)
#--continue 继续执行
#--abort  发生代码冲突后,放弃合并,回到操作前的样子。
#--quit   发生代码冲突后,退出 Cherry pick,但是不回到操作前的样子
git cherry-pick --continue
当您在Git中尝试将某条commit一个分支(如`master_test`) cherry-pick 到另一个分支(如 `master`),并且遇到冲突时,您可以按照以下步骤来解决: ### 步骤 1: 检查冲突的commit ID - 使用 `git log` 命令查看当前要 cherry-pick 的commit ID。这个ID通常是在GitLab或其他版本控制系统中显示的。 ### 步骤 2: 记录并保存本地代码 - 当发现冲突时,您应该先暂停操作,以防进一步覆盖未完成的工作。此时可以使用 `git stash save "message"` 来暂存所有修改,这样下次回到项目时,您的工作仍然保持原样。 ### 步骤 3: 处理冲突文件 - 进入项目目录,使用 `git checkout master` 切换到目标分支(在这里是 `master`)。之后通过 `git cherry-pick <commit_id>` 尝试应用该commit。这里的 `<commit_id>` 是之前找到的冲突commit的ID。 - Git会提示您哪些文件存在冲突,因为这些文件的内容在源分支和目标分支之间不同。 - 对于每个冲突文件,Git会使用差异工具(默认通常是 `diff -u`),让您手动选择合并策略。这可能包括接受源分支版本、目标分支版本,或者选择一个新的合并路径。您可以逐行审查差异,决定哪个版本更合适。 ### 步骤 4: 完成合并和解决冲突 - 根据您的判断对每个冲突文件做出修改以消除差异。 - 使用文本编辑器或IDE(比如PyCharm)编辑这些文件,直到所有冲突都被解决为止。 - 保存更改并关闭编辑器。 ### 步骤 5: 提交修复后的commit - 使用 `git add .` 添加所有修改的文件到索引。 - 使用 `git commit -m "Resolved cherry-pick conflict with commit <commit_id>"` 来提交这次修复。这里的 `<commit_id>` 是与冲突关联的commit的ID。 ### 步骤 6: 推送更改 - 最后,使用 `git push origin master` 将更改推送到远程仓库。 --- ## 相关问题: 1. **如何在Git中手动解决冲突而无需依赖工具?** 手动解决冲突主要涉及到比较文件的不同版本并在合并时作出决策。对于复杂的冲突,了解版本控制的基本原理和文件比较工具的使用可以帮助高效地解决问题。 2. **如果在解决冲突后,发现仍有部分不一致的地方怎么办?** 如果在第一次解决冲突后仍存在问题,应再次检查文件内容和版本历史,可能需要更细致地调整合并策略或重新考虑变更的逻辑。 3. **在Git中,如何避免cherry-pick操作导致的冲突?** 为了避免冲突,可以在应用commit之前创建一个新的feature branch来进行开发测试,确认一切正常后再将功能merge回主分支。这样可以减少直接在主分支上的不稳定因素。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值