前言
场景:当已有本地仓库和远端仓库的情况下,如何进行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来查询手册。
图形化工具能提高我们的开发效率,但是多使用命令更能加深我们对技术的理解。