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