前言
在日常学习或者工作中经常会用到git指令。我对这些常用指令做一个小结。
初始化
本地项目放入远程仓库
当在远程仓库内,成功创建一个仓库时。页面会展示一些基本的git命令。 以gitee为例子,我创建了一个名为testgit的仓库
如果电脑是初次使用git,那么要根据如图全局设置一下,否则git push时要输入用户名和密码。
初始化的大致思路:
- 创建本地仓库
- 给远程仓库添加别名
- 将本地仓库与远程仓库关联
在图中,也是给了两种情况,根据有无本地仓库,如果有的话就省略了第一步。
将远程仓库的项目拿到本地
如果仅仅想把远程仓库的项目拿过来,那么复制远程仓库的HTTPS地址
使用git clone 远程仓库地址
就可以拉取到本地了。打开项目不要忘记使用npm install
将项目所依赖的包下载下来
注:如果发生fatal: refusing to merge unrelated histories
错误,可以输入指令:
git pull origin master --allow-unrelated-histories
此时有可能进入vim,如何退出vim
先按下Esc键然后按下shift+:,就可以输入指令,输入!q就退出了
创建分支
在创建分支时可能有两种情况,一种是本地仓库没有该分支,远程仓库也没有该分支。还有一种是本地仓库没有该分支,远程仓库有该分支。
本地仓库没有该分支,远程仓库也没有该分支
比如要创建一个dev分支 基本思路是:
- 在本地仓库创建一个dev
- 将本地仓库dev分支推送到远程仓库
- 把本地仓库dev分支与远程仓库dev分支关联
按照这个思路来操作一下
git checkout -b dev
(该命令不仅创建dev分支并切换到该分支)git push origin dev
(origin是指远程仓库的名字,我们在一开始新建本地仓库与远程仓库关联git remote add origin时命名的)git branch --set-upstream-to=origin/dev dev
(这条指令比较复杂,没关系,输入git pull会失败,然后有提示)
还有一种简化的思路
- 在本地仓库创建一个dev
- 将本地仓库dev分支推送到远程仓库并与远程仓库dev分支关联
按照简化思路来操作一下,这次我们创建一个dev2分支
git checkout -b dev2
,此时我们输入git push会失败,但是会给一个提示,按照提示我们输入指令
git push --set-upstream origin dev2
创建分支出现的特殊情况
值得注意的是,创建分支在多人协作时,出现的一种特殊情况,当一方创建新分支并推送到远程仓库,其它人通过git branch -a
(该指令能看到本地与远程分支的情况)指令看不到远程仓库新创建的分支。此时获取远程新分支会失败,原因是在远程上找不到该新分支。可是明明有人上传了新分支呀。
为了说明情况模拟一下两个人协作,再创建bb文件夹与cc文件夹。并将刚刚的远程仓库clone到本地
通过git branch -a
指令,
两个文件红色部分代表远程仓库的分支,此时看到的远程仓库的分支是一样的,remotes/origin/HEAD -> origin/master
只是表示远程仓库指向的是master分支。
然后在bb文件夹项目中创建分支dev3,再看一下远程分支内是能显示出来dev3分支,而cc文件夹却显示不出
此时我们使用一个新的指令
git remote show origin
可以看到bb项目的dev3状态是tracked,cc项目的dev3状态是new并给出提示使用fetch指令
使用git fetch origin
后再次查看,这次状态就变tracked。现在可以拉取新分支了
本地仓库没有该分支,远程仓库有该分支
我们推荐使用简化的思路,创建分支并和远程仓库分支关联
以bb项目为例,创建dev分支并和远程仓库dev分支关联
使用指令git checkout -b dev origin/dev
当然也可以用稍复杂的思路,当然也没必要了,不过还是演示一下
- 先本地创建dev分支
- 再与远程dev分支关联
以bb项目为例,创建dev2分支并和远程仓库dev2分支关联
git checkout -b dev2
git branch --set-upstream-to=origin/dev2 dev2
(该指令复杂,可输入git pull,报错会有提示)
使用分支的心得
有的时候我们对项目有些新想法但还不确定想法是否可行,那么可能需要创建一些文件,但又不想对原来项目产生影响。那么可以创建一个新分支,然后在新分支进行操作。操作好后,git add .
,git commit -m '...'
执行这两个命令后,代码就保存在了本地分支。再切换到原来的分支就发现新建文件不见了。再切换回新分支,新建的文件就又回来了。
删除分支
删除分支前确保已经合并分支
删除分支的思路:
- 切换到非删除的分支
- 删除本地分支
- 删除远程分支
以bb项目的为例,删除dev3分支
git checkout master
git branch -d dev3
git push origin -d dev3
删除分支出现的特殊情况
与创建分支时同样出现一种情况,在多人协作中,bb项目删除了dev3,可是在cc项目中仍然能查到dev3。但是git pull
从远程拉取dev3代码会失败。
输入git remote show origin
可以看到dev3的状态是stale,stale英文意思陈腐的,后面有提示指令输入
git remote prune origin
再次查看分支,发现远程仓库没有dev3了,然后再删除本地的dev3。删除前记得切换到其它分支。
合并分支
举例:在bb项目中,dev分支合并到master分支 思路:
- 将dev分支的内容提交
- 切换到master分支(然后可以git pull,拉取一下远程库的代码。但我习惯提交之前拉取)
- 在master分支合并dev分支(可能有冲突,手动解决后,git add,git commit)
- 在master分支git pull,拉取远程库的代码(可能有冲突,手动解决后,git add,git commit)
- 在master分支git push,提交代码到远程库
- 根据项目需求要么删除分支,要么切换到dev分支
操作一下
- dev分支:
git add .; git commit -m '填写修改的内容'; git pull; git push;
- dev分支:
git checkout master
- master分支:
git merge dev
- master分支:
git pull
- master分支:
git push
- master分支:
git checkout dev
对master分支打标签
为什么要对项目打标签呢?要知道项目开发不是一蹴而就的,可能要添加新功能啊,修复了bug啊,项目不断改善,版本不断迭代。随便在gitee上找一个例子体验一下
可以看到该项目有170个标签或者说有170个版本。点进去仔细看看
不过这里感觉不太好的一点是,描述这里没有写内容,那该版本究竟是改善了什么看不出来。右侧操作点击下载按钮就能下载该版本的项目。
如何打标签
思路:
- 在本地打tag
- 将本地tag推送到远程仓库
操作
git tag -a v1.0.0 -m '项目第一次版本'
git push origin v1.0.0
可以看到远程仓库已经有了一个刚刚上传的tag,并且描述里也有刚刚写的备注内容
当提交多次tag后可能就忘记了已经到哪个版本了,再提交时就不知道写什么版本号,此时就要查看一下版本号
git tag
tag如无必要,不要轻易去删除。如果一定要删除也是该思路
- 删除本地tag
- 删除远程tag
对应的指令
- git tag -d v1.0.0
- git push origin -d v1.0.0
小结
这里只介绍了一些git常用的,基础的指令,内容比较简单,让大家见笑。