Git如何同步上游仓库标签并保留自定义composer.json文件?
最优且简单的同步方案:精准保留你的
composer.json 你之前直接合并master的方式确实会踩坑——把上游master的所有额外变更都带进来了,但你其实只需要保留自己添加的composer.json文件。针对你这种只有单个自定义提交的场景,用cherry-pick是最精准且省心的做法,下面是一步步的操作指南:
步骤1:拉取上游所有最新标签和代码
先确保本地已经获取了上游仓库的所有新标签(包括你提到的v2.2.0等版本):
git fetch upstream --tags
步骤2:基于上游目标标签创建独立分支
以上游的v2.2.0标签为例,创建一个新的本地分支,这个分支完全继承上游标签的代码状态:
git checkout -b v2.2.0-with-composer upstream/v2.2.0
这样你就得到了一个和上游v2.2.0版本完全一致的干净分支,没有任何额外变更。
步骤3:精准应用你的composer.json提交
找到你两年前添加composer.json的那个提交哈希(即2b5c20eb2ad3ab624eb3eca5e86f06132cf9b216),用cherry-pick把这个提交单独应用到当前分支:
git cherry-pick 2b5c20eb2ad3ab624eb3eca5e86f06132cf9b216
这个命令只会把添加composer.json这一个变更加到当前分支,不会带入master分支的其他任何内容,完美匹配你的需求。
步骤4:验证并推送到远程仓库
先检查一下当前分支的状态,确认只有composer.json被添加,其他文件和上游标签一致:
git status git diff
如果没有冲突(理论上不会,因为上游仓库没有这个文件),直接把分支推送到你的远程仓库:
git push origin v2.2.0-with-composer
步骤5:同步标签(可选但推荐)
如果你想让自己的远程仓库也有和上游同名的标签(比如v2.2.0),可以按以下步骤操作:
# 如果本地已有旧的v2.2.0标签,先删除 git tag -d v2.2.0 # 删除远程仓库的旧标签 git push origin :refs/tags/v2.2.0 # 在当前分支打新标签 git tag v2.2.0 # 推送新标签到远程 git push origin --tags
后续同步上游新标签的通用流程
以后上游发布新标签时,重复上面的步骤即可:
git fetch upstream --tags拉取新标签- 基于新标签创建本地分支
cherry-pick你的composer.json提交- 推送分支和标签到远程
这种方法的好处是完全精准,只保留你需要的自定义变更,不会引入任何多余的内容,操作也非常简单,适合你这种只有单个自定义提交的场景。
内容的提问来源于stack exchange,提问作者Mirko Pagliai
相关产品推荐
相关产品推荐

