zoukankan      html  css  js  c++  java
  • 【git操作】如何在两个git客户端间同步代码

    问题描述

    公司git服务器因为断电挂掉了,自己又分别在win与linux两个环境下进行了代码的编写,现在就是需要将win上编写的代码,合并到linux环境下。

    操作方法

    通过在网上查找方法,决定使用git bundle来进行代码的合并。

    win下生成bundle文件

    首先确定win下需要合并的commit:
    git log
    这里我需要将最近的4条commit生成bundle文件,这里指定分支为master分支:
    git bundle create master_bundle -4 master
    就是就生成了buddle文件。
    然后对所生所的bundle文件进行检验:
    git bundle verify master_bundle
    确认没有问题之后,将master_bundle文件拷贝到linux环境下。

    linux下应用bundle

    将bundle文件放置到代码路径上一级,进行合并操作:
    git fetch ../master_bundle master:master

    我在这里出现了两个问题:

    1、首先需要将代码分支切换到其他分支(非所需要的分支,这里为master),不然会继续操作报如下的错误:

    fatal: Refusing to fetch into current branch refs/heads/masters of non-bare repository

    2、由于linux下还有其他的提交,导致合并失败:

    ! [rejected] master-> master(non-fast-forward)

    解决方法是:
    首先基于linux环境master提取一个备份分支:
    切换到master分支
    git checkout master
    创建临时分支
    git checkout -b master_tmp
    然后将后继提交的commit撤销:
    git reset --hard commit号
    执行上述的合并操作,

    [jesse@jesse workspace]$ git fetch ../master_bundle master:master
    From ../master_bundle
    7cc3597..bcc8870 master -> master

    完成之后,再将临时分支,合并到master分支,如果有冲突,解决冲突:
    切换到master分支
    git checkout master
    合并操作
    git merge --no-ff master_tmp

    这样,就可以将win下的代码合并到linux下的。

    最后的话

    git还是非常灵活的工具,自己知道的也是九牛一毛,还需要继续学习,上述解决问题的方法,应该还是有最优解,以后有时间了,还是要再继续优化一下。
    有问题还是多查git手册
    以后要多写点博客记录下工作与学习,学会分享。
    嗯,继续干活了。。。

    参考链接资料:

    git-bundle
    git线下传输仓库

  • 相关阅读:
    Jenkins+gitlab自动化构建部署
    浅尝CI/CD,真香
    各种奇葩,我感觉我快窒息了,来吐吐槽...
    用SMART原则来创建一个好的OKR
    用OKR改变个人能力得不到明显提升的困境
    承诺型与愿景型,什么样的OKR适合你?
    OKR文化:关键成果必须具备的五个特点
    为什么不能完全用OKR替代KPI?
    OKR的激励方式应该注意什么?
    OKR如何与绩效考核并行?
  • 原文地址:https://www.cnblogs.com/JesseTsou/p/8907147.html
Copyright © 2011-2022 走看看