環境
系統:win7
git版本: 2.16.2.windows.1
問題
1、本地初始化了git倉庫,放了一些文件進去並進行了add操作和commit提交操作;
$git add -A
$git commit -m "start 2018-06-06"
2、github創建了git倉庫並建立了README文件;
3、本地倉庫添加了github上的git倉庫作爲遠程倉庫,起名origin;
$git remote add origin https://github.com/tielemao/TielemaoMarkdown
4、問題來了,本地倉庫在想做同步遠程倉庫到本地爲之後本地倉庫推送到遠程倉庫做準備時報錯了,錯誤如下:
fatal: refusing to merge unrelated histories
(拒絕合併不相關的歷史)
解決
出現這個問題的最主要原因還是在於本地倉庫和遠程倉庫實際上是獨立的兩個倉庫。假如我之前是直接clone的方式在本地建立起遠程github倉庫的克隆本地倉庫就不會有這問題了。
查閱了一下資料,發現可以在pull命令後緊接着使用--allow-unrelated-history選項來解決問題(該選項可以合併兩個獨立啓動倉庫的歷史)。
命令:
$git pull origin master --allow-unrelated-histories
以上是將遠程倉庫的文件拉取到本地倉庫了。
緊接着將本地倉庫的提交推送到遠程github倉庫上,使用的命令是:
$ git push <遠程主機名> <本地分支名>:<遠程分支名>
也就是
$git push origin master:master
提交成功。
pull
git pull 命令基本上就是 git fetch 和 git merge 命令的組合體,Git 從指定的遠程倉庫中抓取內容,然後馬上嘗試將其合併進你所在的分支中。
從遠程倉庫中獲得數據,可以執行:
$ git fetch [remote-name]
1
這個命令會訪問遠程倉庫,從中拉取所有你還沒有的數據。 執行完成後,你將會擁有那個遠程倉庫中所有分支的引用,可以隨時合併或查看。
但是注意的是 git fetch 並不會自動合併或修改你當前的工作。 當準備好時你必須手動將其合併入你的工作。
如果你使用 clone 命令克隆了一個倉庫,命令會自動將其添加爲遠程倉庫並默認以 “origin” 爲簡寫。 所以,git fetch origin 會抓取克隆(或上一次抓取)後新推送的所有工作。
由於fetch命令後還要再做一步merge命令的操作,所以使用 git pull 命令來自動的抓取然後合併遠程分支到當前分支。 (相當於一次執行fetch加merge命令)這可能會是一個更簡單或更舒服的工作流程。