记Git的使用之Clone别人的仓库并提交更新到自己的远程仓库

记Git的使用之Clone别人的仓库并提交更新到自己的远程仓库

1. 说明

有些项目需要使用到别人开源的项目拿来做二次开发, 以前我的做法是先克隆到本地, 然后将这个项目复制一份后重命名为自己的项目名称, 在开源项目更新后, 先去更新那个开源项目, 然后复制->粘贴->覆盖… 没错 , 就是这么简单粗暴.

但是慢慢的发现其实也有些问题, 其中之一就是这种纯覆盖的模式道理科不科学, 合不合理, 以及, 更新是否足够及时

暂不说合不合理的问题, 更新及时就是一个问题, 因为很可能我很多项目做完也就做完了, 无论引用的项目是否更新, 我本地项目没问题之后基本也就没跟着更新过了, 也是一直害怕直接覆盖会把我的项目给搞崩了

2. 实验

理想状态当然是, clone别人的项目, 然后自己新建一个远程仓库, 同时之后的提交都提交到自己的仓库内, 在之前的使用中得知Git是可以添加多个remote的. 也就是说, 是完全可以clone后再添加一个自己的remote然后进行推送的.

实际上, 我也是这样做的. 但是在添加完自己的remote之后, 我开始了提交操作, 然后发现git报错提示需要我先执行pull

在执行pull之后, 提示报错: fatal: refusing to merge unrelated histories
意为: 拒绝合并不相关的历史

说白了就是, pull因为会执行merage, 在合并的时候发现了原项目的历史不是自己的, 和自己不相关, 拒绝合并,所以要解决这个问题, 就要 在执行pull的时候 增加参数来让它合并两个不相关的独立仓库

--allow-unrelated-histories

完整操作指令应为: git pull origin master --allow-unrelated-histories

这样执行后就成功的将自己的仓库和原仓库记录合并了, 然后就可以推送本地更新到自己的remote了.

当然, 如果和我一样是先clone了开源库, 那此时的默认分支和remote应该指向的都是开源库的地址, 需要修改一下默认分支和, 至于要不要设置自己的remote为默认暂未测试

也记录下我的步骤吧

  1. 假设此处的步骤都在上述操作之后
  2. 设置我的remote为默认
  3. 测试vscode集成的git管理执行推送, 发现无法推送, 此时推送依然是向原项目分支上进行推送
  4. 在vscode中选择分支栏, 发现此时仅有一个分支: origin master
  5. 这个分支是克隆的原项目的主分支
  6. 我执行了切换到其它分支的操作, 选择自己remote下的分支, 并进行了重新命名分支的操作
  7. 此时发现本地项目分支下多出了一个分支, 该分支即为我刚刚命名的分支
  8. 切换到当前新分支内, 此后就可以直接从我的remote中进行拉取和推送了

但其实这里还有个问题我没有进行验证, 我这里相当于新建了分支, 但是按照以前了解到的知识, 建立分支后, 你的推送和更新仅在这个分支内, 也就是说如果我切换回另一个分支, 那么本地的文件也是会直接切回到分支1中的. 等于说两个是不相干的通道. …

那如果这样的话, 岂不是我白折腾了嘛…暂时记录到此, 后续自己会单独建立两个库进行测试, 如果真是如我猜测的话, 那可能还要再去学习如何去合并两个分支了. … Git用了这么久,还是只会推送和拉取, 真是惭愧, 对分支什么的基本没有涉足, 看来需要好好补补课了

你可能感兴趣的:(杂学,git,项目管理)