前言
場景:當已有本地倉庫和遠端倉庫的情況下,如何進行git管理。
方式有兩種
1.最簡單的方式是使用git clone將遠端代碼克隆到本地目錄,並將已有工程代碼直接拷貝到此目錄下讓git管理。
2.手動關聯本地倉庫和遠端倉庫。(本着折騰的原則,本文記錄一下手動關聯的步驟)
開始之前,安利一個git版本控制的gui客戶端工具:sourceTree,下文會以圖文的方式介紹關聯步驟。
準備工作
本地安裝git。
gitlab中新建遠端倉庫。
開始時,本地倉庫(master)和遠端倉庫(origin/master origin/dev)並沒有任何關聯。
步驟
1)先將本地的工程初始化爲git倉庫
進入工程目錄使用git init命令初始化。
$ git init
Initialized empty Git repository in G:/test.work/data-alarm-server/.git/
2)爲本地添加一個遠端倉庫
地址即是我們將要合併的遠端的地址
$ git remote add origin http://xxx/xxx/dataalarmserver.git
3)追蹤遠端分支
開發時,經常會在遠端建立一個開發dev分支,同樣的,我們也可以在本地建立一個開發分支與遠端對應,本地默認分支名爲master。
如下,我們就直接把本地的master分支和遠端dev分支關聯上。
命令作用在於追蹤遠端分支,但如下圖所示,版本仍未同步。
$ git branch --set-upstream-to=origin/dev
Branch 'master' set up to track remote branch 'dev' from 'origin'.
4)查看遠端分支
括號中指明瞭地址是用於拉取還是推送,如果沒有權限,則不會顯示。
git remote -v
origin http://xxxxxx/dataalarmserver.git (fetch)
origin http://xxxxx/dataalarmserver.git (push)
5)使用git pull拉取代碼
直接pull代碼會報錯,單純使用pull命令無法拉取更新,因爲兩個倉庫可能都有內容,所以我們必須加上參數將不相關的兩個倉庫強行合併,報錯如下:
Username for 'http://xxxx': username
fatal: refusing to merge unrelated histories
6)合併不相關的兩個倉庫
--allow-unrelated-histories參數的作用在於允許關聯不相關的歷史信息。
合併之後發現本地已經超前遠端2個版本了。
git pull --allow-unrelated-histories
7)解決合併時的衝突
初始化遠端倉庫時,有可能ReadMe.md及.gitignore文件內容會衝突,需要解決衝突。
8)推送
由於我們只追蹤了遠端的dev分支,直接push會報錯。解釋如下:
其中git push不帶參數,默認情況下,是將本地的master分支推送到遠端origin。
正如下提示所說,我們需要指定將本地倉庫內容推送至遠端倉庫的dev分支。
使用的命令是:git push origin HEAD:dev
$ git push
fatal: The upstream branch of your current branch does not match
the name of your current branch. To push to the upstream branch
on the remote, use git push origin HEAD:dev
9)推送成功,檢查狀態
如下status說明當前我們的分支已經和遠端的dev分支保持同步了
$ git status
On branch master
Your branch is up to date with 'origin/dev'。
nothing to commit, working tree clean。
總結
如果不知道該使用什麼命令時,多多使用git status命令 和git --help來查詢手冊。
圖形化工具能提高我們的開發效率,但是多使用命令更能加深我們對技術的理解。
本文分享自微信公衆號 - 俠夢的開發筆記(xmdevnote)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。