git的常用指令

109 阅读7分钟

前言

在日常学习或者工作中经常会用到git指令。我对这些常用指令做一个小结。

初始化

本地项目放入远程仓库

当在远程仓库内,成功创建一个仓库时。页面会展示一些基本的git命令。 以gitee为例子,我创建了一个名为testgit的仓库

image.png

如果电脑是初次使用git,那么要根据如图全局设置一下,否则git push时要输入用户名和密码。

初始化的大致思路:

  1. 创建本地仓库
  2. 给远程仓库添加别名
  3. 将本地仓库与远程仓库关联

在图中,也是给了两种情况,根据有无本地仓库,如果有的话就省略了第一步。

将远程仓库的项目拿到本地

如果仅仅想把远程仓库的项目拿过来,那么复制远程仓库的HTTPS地址

image.png

使用git clone 远程仓库地址就可以拉取到本地了。打开项目不要忘记使用npm install将项目所依赖的包下载下来

注:如果发生fatal: refusing to merge unrelated histories错误,可以输入指令: git pull origin master --allow-unrelated-histories 此时有可能进入vim,如何退出vim 先按下Esc键然后按下shift+:,就可以输入指令,输入!q就退出了

创建分支

在创建分支时可能有两种情况,一种是本地仓库没有该分支,远程仓库也没有该分支。还有一种是本地仓库没有该分支,远程仓库有该分支。

本地仓库没有该分支,远程仓库也没有该分支

比如要创建一个dev分支 基本思路是:

  1. 在本地仓库创建一个dev
  2. 将本地仓库dev分支推送到远程仓库
  3. 把本地仓库dev分支与远程仓库dev分支关联

按照这个思路来操作一下

  1. git checkout -b dev(该命令不仅创建dev分支并切换到该分支)
  2. git push origin dev(origin是指远程仓库的名字,我们在一开始新建本地仓库与远程仓库关联git remote add origin时命名的)
  3. git branch --set-upstream-to=origin/dev dev (这条指令比较复杂,没关系,输入git pull会失败,然后有提示)

image.png

还有一种简化的思路

  1. 在本地仓库创建一个dev
  2. 将本地仓库dev分支推送到远程仓库并与远程仓库dev分支关联

按照简化思路来操作一下,这次我们创建一个dev2分支

  1. git checkout -b dev2,此时我们输入git push会失败,但是会给一个提示,按照提示我们输入指令

image.png

  1. git push --set-upstream origin dev2
创建分支出现的特殊情况

值得注意的是,创建分支在多人协作时,出现的一种特殊情况,当一方创建新分支并推送到远程仓库,其它人通过git branch -a(该指令能看到本地与远程分支的情况)指令看不到远程仓库新创建的分支。此时获取远程新分支会失败,原因是在远程上找不到该新分支。可是明明有人上传了新分支呀。

为了说明情况模拟一下两个人协作,再创建bb文件夹与cc文件夹。并将刚刚的远程仓库clone到本地 通过git branch -a指令,

image.png

image.png

两个文件红色部分代表远程仓库的分支,此时看到的远程仓库的分支是一样的,remotes/origin/HEAD -> origin/master只是表示远程仓库指向的是master分支。

然后在bb文件夹项目中创建分支dev3,再看一下远程分支内是能显示出来dev3分支,而cc文件夹却显示不出

image.png

image.png

此时我们使用一个新的指令

git remote show origin

image.png

image.png

可以看到bb项目的dev3状态是tracked,cc项目的dev3状态是new并给出提示使用fetch指令

使用git fetch origin后再次查看,这次状态就变tracked。现在可以拉取新分支了

image.png

本地仓库没有该分支,远程仓库有该分支

我们推荐使用简化的思路,创建分支并和远程仓库分支关联

以bb项目为例,创建dev分支并和远程仓库dev分支关联 使用指令git checkout -b dev origin/dev

image.png

当然也可以用稍复杂的思路,当然也没必要了,不过还是演示一下

  1. 先本地创建dev分支
  2. 再与远程dev分支关联

以bb项目为例,创建dev2分支并和远程仓库dev2分支关联

  1. git checkout -b dev2
  2. git branch --set-upstream-to=origin/dev2 dev2(该指令复杂,可输入git pull,报错会有提示)

使用分支的心得

有的时候我们对项目有些新想法但还不确定想法是否可行,那么可能需要创建一些文件,但又不想对原来项目产生影响。那么可以创建一个新分支,然后在新分支进行操作。操作好后,git add .,git commit -m '...'执行这两个命令后,代码就保存在了本地分支。再切换到原来的分支就发现新建文件不见了。再切换回新分支,新建的文件就又回来了。

删除分支

删除分支前确保已经合并分支

删除分支的思路:

  1. 切换到非删除的分支
  2. 删除本地分支
  3. 删除远程分支

以bb项目的为例,删除dev3分支

  1. git checkout master
  2. git branch -d dev3
  3. git push origin -d dev3
删除分支出现的特殊情况

与创建分支时同样出现一种情况,在多人协作中,bb项目删除了dev3,可是在cc项目中仍然能查到dev3。但是git pull从远程拉取dev3代码会失败。

image.png

输入git remote show origin

image.png

可以看到dev3的状态是stale,stale英文意思陈腐的,后面有提示指令输入

git remote prune origin

再次查看分支,发现远程仓库没有dev3了,然后再删除本地的dev3。删除前记得切换到其它分支。

image.png

合并分支

举例:在bb项目中,dev分支合并到master分支 思路:

  1. 将dev分支的内容提交
  2. 切换到master分支(然后可以git pull,拉取一下远程库的代码。但我习惯提交之前拉取)
  3. 在master分支合并dev分支(可能有冲突,手动解决后,git add,git commit)
  4. 在master分支git pull,拉取远程库的代码(可能有冲突,手动解决后,git add,git commit)
  5. 在master分支git push,提交代码到远程库
  6. 根据项目需求要么删除分支,要么切换到dev分支

操作一下

  1. dev分支:git add .; git commit -m '填写修改的内容'; git pull; git push;
  2. dev分支:git checkout master
  3. master分支:git merge dev
  4. master分支:git pull
  5. master分支:git push
  6. master分支:git checkout dev

对master分支打标签

为什么要对项目打标签呢?要知道项目开发不是一蹴而就的,可能要添加新功能啊,修复了bug啊,项目不断改善,版本不断迭代。随便在gitee上找一个例子体验一下

image.png

可以看到该项目有170个标签或者说有170个版本。点进去仔细看看

image.png

不过这里感觉不太好的一点是,描述这里没有写内容,那该版本究竟是改善了什么看不出来。右侧操作点击下载按钮就能下载该版本的项目。

如何打标签

思路:

  1. 在本地打tag
  2. 将本地tag推送到远程仓库

操作

  1. git tag -a v1.0.0 -m '项目第一次版本'
  2. git push origin v1.0.0

image.png

可以看到远程仓库已经有了一个刚刚上传的tag,并且描述里也有刚刚写的备注内容

当提交多次tag后可能就忘记了已经到哪个版本了,再提交时就不知道写什么版本号,此时就要查看一下版本号

git tag

tag如无必要,不要轻易去删除。如果一定要删除也是该思路

  1. 删除本地tag
  2. 删除远程tag

对应的指令

  1. git tag -d v1.0.0
  2. git push origin -d v1.0.0

小结

这里只介绍了一些git常用的,基础的指令,内容比较简单,让大家见笑。