首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Git 仓库间代码迁移 | merge & cherry-pick

Git 仓库间代码迁移 | merge & cherry-pick

作者头像
奋飛
发布2025-05-31 16:09:54
发布2025-05-31 16:09:54
17900
代码可运行
举报
文章被收录于专栏:Super 前端Super 前端
运行总次数:0
代码可运行

工作中遇到了这样场景:原工程 A 由于业务发展,衍生出了 B 工程,至此两个工程独立迭代。A 工程近期上线了一个功能,B 工程也希望具备该功能,需要研发同学做代码的同

问题简化:如何在两个 git 仓库间做代码迁移。

回溯一下,如果将代码从一个分支迁移到另一个分支。

  • 如果需要所有代码变动,可以使用 merge 操作;
  • 如果需要部分代码变动(某几个提交),可以使用 cherry-pick 操作。

merge

将两个或多个分支的历史合并在一起。

代码语言:javascript
代码运行次数:0
运行
复制
$ git merge --help

NAME
       git-merge - Join two or more development histories together
...

示例:

🐫 将 branchA branchB 合并到当前分支

代码语言:javascript
代码运行次数:0
运行
复制
$ git merge branchA branchB

🐎 将 branchA 合并到当前分支,使用 ours 的合并策略:

代码语言:javascript
代码运行次数:0
运行
复制
$ git merge -s ours branchA

三种常见的合并策略:ourstheirsrecursive

选择合适的合并策略取决于具体需求和合并的场景

选项

说明

recursive(默认)

尝试找到两个分支的共同祖先,然后分别将两个分支的改动应用到共同祖先上,最后将这些改动合并到一起

ours

优先选择主分支(通常是当前所在的分支)的改动

theirs

优先选择要合并进来的分支的改动

仓库间合并

代码语言:javascript
代码运行次数:0
运行
复制
# 追加源
$ git remote add originNew git://url
# 将新追加源远程内容获取本地
$ git fetch originNew
# merge
$ git merge branchName

当然也可以直接合并远程

代码语言:javascript
代码运行次数:0
运行
复制
# 追加源
$ git remote add originNew git://url
# merge
$ git merge originNew/branchName

git fetch 从另一个存储库下载objects和refs

代码语言:javascript
代码运行次数:0
运行
复制
# 从多个获取
$ git fetch origin originNew
# 获取全部
$ git fetch --all

cherry-pick

允许开发者精确地选择和应用特定的提交到不同的分支。

代码语言:javascript
代码运行次数:0
运行
复制
$ git cherry-pick --help

NAME
       git-cherry-pick - Apply the changes introduced by some existing commits

允许将一个或多个已有的提交从一个分支应用到当前分支。这就像是从另一个分支“挑选”提交并将其“复制”到当前的工作分支。

示例

🐫 某个特定的提交:commit-hash 应用到当前分支

代码语言:javascript
代码运行次数:0
运行
复制
$ git cherry-pick <commit-hash>

🐎 一系列提交:commit1commit2 的所有提交应用到当前分支

代码语言:javascript
代码运行次数:0
运行
复制
$ git cherry-pick commit1..commit2

🐏 某合并的提交:mergeCommit 应用到当前分支

代码语言:javascript
代码运行次数:0
运行
复制
$ git cherry-pick -m 1 <mergeCommit>

针对 merge 的 cherry-pick,不知道合并的哪一边应该被视为主线。通过 -m 指定,1 代表父分支。

🐕 只想将变更应用到工作目录和索引,而不创建新的提交

代码语言:javascript
代码运行次数:0
运行
复制
$ git cherry-pick -n <commit-hash>

🐃 将指定提交中对特定文件的变更应用到工作目录和索引

代码语言:javascript
代码运行次数:0
运行
复制
$ git rev-list --reverse <commit-hash> -- <file-path> | git cherry-pick -n --stdin
避免冲突

在 cherry-pick 过程中可能会遇到冲突,Git 会暂停操作并让需要手动解决。解决冲突后,需要继续操作:

代码语言:javascript
代码运行次数:0
运行
复制
$ git cherry-pick --continue

如果决定放弃 cherry-pick,可以使用:

代码语言:javascript
代码运行次数:0
运行
复制
$ git cherry-pick --abort
仓库间应用
代码语言:javascript
代码运行次数:0
运行
复制
# 追加源
$ git remote add originNew git://url
# 将新追加源远程内容获取本地
$ git fetch originNew
# cherry-pick
$ git cherry-pick commit1..commit2
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • merge
  • cherry-pick
    • 示例
    • 避免冲突
    • 仓库间应用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档