問題描述
公司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手冊。
以后要多寫點博客記錄下工作與學習,學會分享。
嗯,繼續干活了。。。