猿创征文|项目中使用Git,解决一些项目开发中常见的Git问题

发布于:2023-01-02 ⋅ 阅读:(478) ⋅ 点赞:(0)

写在前面:Git的教程在网上很多,但我在最开始接触项目中需要用Git命令时,发现网上的教程并没有统一的答案告诉我,我到底该输入什么命令,什么又不需要💫。

通过实际项目并在我的menter的帮助下,我也知道了具体的一些用法,在常用的克隆、更新、提交项目需要注意什么

在下面的内容中,请重点注意❗

1.Git简单原理

在这里插入图片描述

工作区: 电脑存放的文件

暂存区(Index/Stage): 在git管理项目时,本地文件会多一个.git文件夹,是版本库。在版本库中有暂存区,通过add命令将本地文件添加到暂存区中

本地仓库: .git文件夹中还包括git自动创建的master分支,使HEAD指针指向这个分支。通过commit命令将暂存区的内容提交到本地仓库

远程仓库: 不是在本地仓库中,项目代码在远程git服务器上,比如项目放在github上,就是一个远程仓库,通常使用clone命令将远程仓库拷贝到本地仓库中,开发后推送到远程仓库中即可;

常用命令

1.克隆远程仓库

git clone 远程仓库地址

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GwJ3wJFE-1662001122144)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/52dadbc60614453882a0c88fc0382170~tplv-k3u1fbpfcp-zoom-1.image)]

一般需要先检查是否配置SSH(克隆项目一般分为SSH key和https ,我基本都是用SSH)

先检查是否登陆

Git是分布式的代码管理工具,远程的代码管理是基于SSH的,所以要使用远程的Git则需要SSH的配置。
github的SSH配置如下:
一 、
设置Git的user name和email:

$ git config --global user.name “用户名”
$ git config --global user.email “邮箱”

二、生成SSH密钥过程:
1.查看是否已经有了ssh密钥:cd ~/.ssh\

如果没有这个文件就去搜一下,网上配置ssh的教程很多

在github上添加ssh密钥,这要添加的是“id_rsa.pub”里面的公钥。

在这里插入图片描述

❗然后就可以克隆了,克隆完成后,就可以看到本地会有克隆下来的文件了,这个时候是不需要init初始化的,文件里一般都有.git文件

2.初始化并上传

git init //把这个目录变成Git可以管理的仓库,会看到多一个.git文件,只需要在第一次建本地项目需要init

.git文件里就存放了所有有关git的任务,所以克隆下来的源码就不用init

git add . //将更改的文件全部添加到暂存中 不但可以跟单一文件,还可以跟通配符,更可以跟目录。一个点就把当前目录下所有未追踪的文件全部add了

git commit -m "提高日志(一般写这次commit都做了什么)" //把文件提交到本地仓库

git remote add origin 远程仓库地址 //关联远程仓库 第一次需要这样做

git push (origin master) //把本地库的所有内容推送到远程库上的master分支上(不加就是提到当前分支)

commit时可能遇到的问题

  • 如果是ESLint的问题,就需要给出错的文件规范格式
  • 如果是配置类的问题,就需要配置
  • 如果是注释的问题,注意//后需要有一个空格

3.分支

分支就是在这个项目中建立多个支路, 可以在不同的分支上开发不同的模块,最后再进行merge合并就可以了。

按我的理解,分支有两种,❗本地分支和远程分支,本地分支可以在本地通过命令建立,远程分支可以在仓库github上新建。

在本地新建分支

git branch //查看本地分支

在这里插入图片描述
看到会有本地两个分支,当前在feat/hero上

git branch -a //查看本地和远程所有分支

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WKEtQBg2-1662001122147)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/8d88d0115e6e4044b90c026d8b518272~tplv-k3u1fbpfcp-zoom-1.image)]
红色的是远程仓库的分支

git checkout -b 本地新建的分支名 远程分支名 //在分支上新建一个本地分支并关联到远程仓库分支,再切换到新分支

git checkout -b feat/idps origin/feat/idps //新建分支feat/idps 关联origin/feat/idps

一般远程仓库分支都会有origin开头


git branch <branch-name> //在本地创建分支,未和远程分支关联,后续操作可能会出错⚠️

❗如果你执行了上个命令,需要切换到其他分支上,把刚刚建立的分支删掉,再建有联系的分支

git checkout 其他分支 //切换到其他分支

❗有时候明明远程分支是有的,但是我切不过去,会提示该分支未知,那么我们需要先拉取一下最新的

git branch -d 分支名 //删除分支 -D强制删除
git checkout -b 本地新建的分支名 远程分支名 //在分支上新建一个本地分支并关联到远程仓库分支,再切换到新分支
git branch -vv //查看本地分支与远程分支的关联关系

在这里插入图片描述

合并分支

1.在github上发起请求 需要❗选择好当前分支和哪个目标分支进行合并

2.命令

git merge <branch-name> //将当前分支与指定分支进行合并

合并请求提交后,再处理好冲突就OK

拉最新代码

❗在进行开发前,最好先拉取最新的代码到本地,这样能接收到最新的信息

git pull origin master //将远程的master分支拉取到当前分支并合并

查看commit版本

git log

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KhjpTw1u-1662001122150)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/62719af6485d4f91bae799b095a9ff54~tplv-k3u1fbpfcp-zoom-1.image)]

回退版本

git reset 版本号

关于分支的一些命令

  • 创建分支:git branch ,如git branch testing;
  • 从当前所处的分支切换到其他分支:git checkout ,如git checkout testing;
  • 新建并切换到新建分支上:git checkout -b ;
  • 删除分支:git branch -d ;
  • 将当前分支与指定分支进行合并:git merge ;
  • 显示本地仓库的所有分支:git branch;
  • 查看各个分支最后一个提交对象的信息:git branch -v;
  • 查看哪些分支已经合并到当前分支:git branch --merged;
  • 查看当前哪些分支还没有合并到当前分支:git branch --no-merged;
  • 把远程分支合并到当前分支:git merge /,如git merge origin/serverfix;如果是单线的历史分支不存在任何需要解决的分歧,只是简单的将HEAD指针前移,所以这种合并过程可以称为快进(Fast forward),而如果是历史分支是分叉的,会以当前分叉的两个分支作为两个祖先,创建新的提交对象;如果在合并分支时,遇到合并冲突需要人工解决后,再才能提交;
  • 在远程分支的基础上创建新的本地分支:git checkout -b /,如git checkout -b serverfix origin/serverfix;
  • 从远程分支checkout出来的本地分支,称之为跟踪分支。在跟踪分支上向远程分支上推送内容:git push。该命令会自动判断应该向远程仓库中的哪个分支推送数据;在跟踪分支上合并远程分支:git pull;
  • 将一个分支里提交的改变移到基底分支上重放一遍:git rebase ,如git rebase master server,将特性分支server提交的改变在基底分支master上重演一遍;使用rebase操作最大的好处是像在单个分支上操作的,提交的修改历史也是一根线;如果想把基于一个特性分支上的另一个特性分支变基到其他分支上,可以使用–onto操作:git rebase --onto ,如git rebase --onto master server client;使用rebase操作应该遵循的原则是:一旦分支中的提交对象发布到公共仓库,就千万不要对该分支进行rebase操作

一些经验

1.在每天开始编码前,先拉去最新的代码版本到本地,防止后续版本太落后(git pull)

2.开发中,利用分支,解决多人多模块开发问题

git fetch 和 git pull 的区别⭐⭐⭐⭐⭐

git fetch 是把远程代码和分支拉下来但是不会合并

git pull 会自动合并

Git 中 rebase 和 merge 的区别⭐⭐⭐⭐⭐

(网易雷火笔试考了这个)
都是合并分支, rebase 不会产生额外的 commit, 而 merge 会把这两个分支的遗漏 commit 记录重新创建一个commit保存起来。比较臃肿,所以尽量不 要用 merge

git add 和 git stage 有什么区别

两个意思是一样的

是因为要跟 svn add 区分,两者的功能是完全不一样的,svn add 是将某个文件加入版本控制,而 git add 则是把某个文件加入暂存区,因为在 git 出来之前大家用 svn 比较多,所以为了避免误导,git 引入了git stage,然后把 git diff --staged 做为 git diff --cached 的相同命令。基于这个原因,我们建议使用 git stage 以及 git diff --staged。

如果有不对的地方,欢迎指导

转载:欢迎转载,但未经作者同意,必须保留此段声明;

本文含有隐藏内容,请 开通VIP 后查看