【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线下传输仓库

原文地址:https://www.cnblogs.com/JesseTsou/p/8907147.html