问题描述
公司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手册。
以后要多写点博客记录下工作与学习,学会分享。
嗯,继续干活了。。。