Ubuntu17下如何将AshamaneCore仓库提交合并为单个提交到本地衍生仓库
我来一步步帮你搞定这两个Git操作问题,都是Ubuntu 17下的常规流程,跟着步骤走就行:
假设你已经有自己的本地仓库,并且之前可能已经关联过AshamaneCore的远程源(如果没有,先做第一步):
添加AshamaneCore为远程上游源:
在你的本地仓库根目录下执行:git remote add upstream https://github.com/AshamaneProject/AshamaneCore
这里把这个远程源命名为upstream,方便后续区分你自己的仓库源(一般叫origin)。拉取AshamaneCore的所有最新提交:
git fetch upstream
这一步会把对方仓库的所有分支和提交历史拉到本地,但不会影响你当前的工作分支。创建一个临时分支来处理合并操作:
先切换到你自己仓库的主分支(比如main或master,根据你的仓库分支名调整):git checkout main
然后创建一个新分支,用来做 squash 合并:git checkout -b squash-ashamane main执行squash合并,把所有提交压缩成一个:
git merge --squash upstream/main
这个命令会把AshamaneCore主分支的所有提交变更都整合到当前分支的暂存区,但不会自动生成提交——所有变更会被打包成一个待提交的状态。提交这个整合后的变更:
现在你可以查看一下变更内容确认没问题:git status
然后提交,写一个清晰的提交信息,比如:git commit -m "Squash merge all changes from AshamaneCore (full history compressed)"把临时分支的变更合并到你的主分支:
切换回主分支:git checkout main
合并临时分支:git merge squash-ashamane
如果没有冲突,这一步就完成了;如果有冲突,解决后执行git add .再完成合并。推送到你自己的远程仓库:
git push origin main
这里分两种常见场景,根据你的需求选:
场景1:只整合其他仓库的特定单个/多个提交
如果只需要对方仓库里的某几个提交,用cherry-pick最方便:
- 添加目标仓库为远程源:
git remote add other-repo <目标仓库的Git地址> - 拉取目标仓库的提交历史:
git fetch other-repo - 找到要整合的提交哈希值:
查看对方仓库主分支的提交记录,找到你需要的提交的哈希(比如前7位就行):git log other-repo/main --oneline - 切换到你的主分支,应用目标提交:
git checkout maingit cherry-pick <目标提交哈希>
如果有冲突,手动解决冲突后,执行git add .,然后继续:git cherry-pick --continue
如果不想处理冲突,也可以放弃操作:git cherry-pick --abort
场景2:整合其他仓库整个分支的所有提交(保留原提交历史)
如果需要把对方仓库整个分支的所有提交都完整整合到你的仓库,用普通合并即可:
- 添加并拉取目标仓库:
同样先添加远程源并拉取:git remote add other-repo <目标仓库地址>git fetch other-repo - 合并对方分支到你的主分支:
git checkout maingit merge other-repo/main
这会把对方分支的所有提交历史都合并进来,生成一个合并提交(如果没有冲突的话)。
另外,如果你不想保留对方的提交历史,只想把对方当前的代码状态作为一个新提交加入,也可以用类似第一个问题的--squash选项合并:git merge --squash other-repo/main
然后自己提交即可。
内容的提问来源于stack exchange,提问作者Alejandro Baena Thai Dj Alex T

