Skip to content

git合并升级

背景

image-20250316062558549

image-20250316071945514


image-20250316072009564

image-20250316072022559

image-20250316072029539


image-20250316072047540

场景

bash
场景:
现在作者在频繁更新一个博客主题,我通过github将他的仓库拉取到本地,然后删除了.git,并做了自定义的一些配置,然后git init初始化为自己的一个私有新仓库并推送到了gitee,地址为git@gitee.com:onlyonexl/vitepress-theme-teek-one-private.git。    当前原作者git远程仓库又更新了,我本地仓库需要同步作者远程仓库更新,想体验下博客主题的新功能,作者远程仓库地址:https://github.com/Kele-Bingtang/vitepress-theme-teek.git。  

请问我该如何操作呢?

gpt

要将本地仓库与原作者的远程仓库同步,同时保留你的自定义配置,可以按照以下步骤操作:


一、添加原作者远程仓库

  1. 进入本地仓库目录:
    bash
    cd vitepress-theme-teek-one-private
  2. 添加原作者的远程仓库地址:
    bash
    git remote add upstream https://github.com/Kele-Bingtang/vitepress-theme-teek.git
  3. 验证远程仓库是否添加成功:
    bash
    git remote -v
    输出应包含:
    origin  git@gitee.com:onlyonexl/vitepress-theme-teek-one-private.git (fetch)
    origin  git@gitee.com:onlyonexl/vitepress-theme-teek-one-private.git (push)
    upstream        https://github.com/Kele-Bingtang/vitepress-theme-teek.git (fetch)
    upstream        https://github.com/Kele-Bingtang/vitepress-theme-teek.git (push)

二、同步原作者仓库的更新

  1. 拉取原作者仓库的最新代码:
    bash
    git fetch upstream
  2. 将原作者仓库的更新合并到本地分支:
    bash
    git merge upstream/main
    • 如果本地分支不是 main,请将 main 替换为你的分支名称。
  3. 解决冲突(如果有):
    • 如果合并时出现冲突,Git 会提示冲突文件。
    • 打开冲突文件,手动解决冲突。
    • 解决冲突后,标记文件为已解决:
      bash
      git add <冲突文>
    • 完成合并:
      bash
      git commit

三、推送更新到你的远程仓库

  1. 将合并后的代码推送到你的 Gitee 仓库:
    bash
    git push origin main
    • 如果本地分支不是 main,请将 main 替换为你的分支名称。

四、保留自定义配置

在同步过程中,如果你的自定义配置(如 .gitignorevite.config.js 等)与原作者仓库的更新有冲突,可以采取以下措施:

  1. 备份自定义文件
    • 在合并前,备份你的自定义配置文件。
    • 合并完成后,将备份文件覆盖到仓库中。
  2. 使用 Git 忽略冲突
    • 在合并时,使用 git checkout --ours <文件> 保留你的版本:
      bash
      git checkout --ours vite.config.js
    • 或者使用 git checkout --theirs <文件> 保留原作者的版本:
      bash
      git checkout --theirs vite.config.js

五、总结

步骤操作
添加原作者远程仓库git remote add upstream <原作者仓库地址>
拉取原作者更新git fetch upstream,然后 git merge upstream/main
解决冲突手动解决冲突,或使用 git checkout --ours/--theirs 保留指定版本。
推送更新到你的仓库git push origin main
保留自定义配置备份自定义文件,或使用 git checkout --ours 保留你的版本。

通过以上步骤,你可以将本地仓库与原作者的远程仓库同步,同时保留你的自定义配置。如果还有其他问题,欢迎随时提问!


以上自己待测试。

🍊

亲自测试(出师不利)

当时测试,存在一定的问题;(后续再测试……)

当时合并时,有219多个文件要合并……

我自己站点删除了demo\docs-base下之前的测试文件;

image-20250316152721098


先备份原本的仓库

  • 先确认本地和远程仓库状态是一致的(已确认OK)

image-20250316151211773

  • 将本地仓库做一个完全克隆(已完成)

注意:不用拷贝node_modules。

image-20250316151325823

新创建如下D:\teeker-git合并更新备份-2025.3.16目录:

image-20250316151402681

开始git合并更新

查看当前仓库状态

bash
git log --oneline

image-20250316151554008

添加原作者远程仓库

bash
Administrator@DESKTOP-7PB0PFA MINGW64 /d/vitepress-theme-teek-one-private (master)
$ git remote add upstream https://github.com/Kele-Bingtang/vitepress-theme-teek.git

Administrator@DESKTOP-7PB0PFA MINGW64 /d/vitepress-theme-teek-one-private (master)
$ git remote -v
origin  git@gitee.com:onlyonexl/vitepress-theme-teek-one-private.git (fetch)     
origin  git@gitee.com:onlyonexl/vitepress-theme-teek-one-private.git (push)      
upstream        https://github.com/Kele-Bingtang/vitepress-theme-teek.git (fetch)
upstream        https://github.com/Kele-Bingtang/vitepress-theme-teek.git (push)

同步原作者仓库的更新

bash
git fetch upstream

image-20250316151854821

image-20250316151957514

gpt

bash
Administrator@DESKTOP-7PB0PFA MINGW64 /d/vitepress-theme-teek-one-private (master)
$ git merge upstream/master
fatal: refusing to merge unrelated histories

fatal: refusing to merge unrelated histories 错误表明 Git 检测到你尝试合并的两个分支(当前分支和 upstream/master)没有共同的提交历史,因此 Git 默认拒绝合并。

问题原因

  • 你的本地仓库和 upstream 仓库的初始提交不同,导致 Git 认为它们是两个完全独立的项目。
  • 这种情况通常发生在你克隆了一个仓库,然后又尝试合并另一个不相关的仓库。

解决方法

方法 1:允许合并不相关的历史

如果你确定需要合并这两个不相关的分支,可以使用 --allow-unrelated-histories 参数强制合并:

bash
git merge upstream/master --allow-unrelated-histories
  • 合并后,Git 会将两个分支的历史记录合并为一个。
  • 如果有冲突,Git 会提示你手动解决冲突。

方法 2:重新设置远程仓库

如果你不需要保留本地仓库的历史记录,可以重新设置远程仓库:

  1. 删除当前远程仓库:

    bash
    git remote remove upstream
  2. 重新添加远程仓库并强制拉取:

    bash
    git remote add upstream https://github.com/Kele-Bingtang/vitepress-theme-teek.git
    git fetch upstream
    git reset --hard upstream/master
    • 注意:此操作会丢弃本地仓库的所有更改,请谨慎使用。

方法 3:创建一个新分支

如果你希望保留本地仓库的历史记录,可以创建一个新分支来合并 upstream/master

  1. 创建一个新分支:

    bash
    git checkout -b new-branch
  2. 合并 upstream/master

    bash
    git merge upstream/master --allow-unrelated-histories

注意事项

  • 如果合并后出现冲突,Git 会标记冲突文件,你需要手动解决冲突。

  • 解决冲突后,使用以下命令完成合并:

    bash
    git add <冲突文>
    git commit

总结

方法适用场景
允许合并不相关的历史需要保留本地仓库和 upstream 仓库的历史记录。
重新设置远程仓库不需要保留本地仓库的历史记录,直接使用 upstream 仓库的内容。
创建一个新分支希望保留本地仓库的历史记录,同时合并 upstream 仓库的内容。

根据你的需求选择合适的方法即可!如果还有其他问题,欢迎随时提问!

继续测试

image-20250316152630925

回退