写在前面:Git的教程在网上很多,但我在最开始接触项目中需要用Git命令时,发现网上的教程并没有统一的答案告诉我,我到底该输入什么命令,什么又不需要💫。
通过实际项目并在我的menter的帮助下,我也知道了具体的一些用法,在常用的克隆、更新、提交项目需要注意什么
在下面的内容中,请重点注意❗
1.Git简单原理
工作区: 电脑存放的文件
暂存区(Index/Stage): 在git管理项目时,本地文件会多一个.git文件夹,是版本库。在版本库中有暂存区,通过add命令将本地文件添加到暂存区中
本地仓库: .git文件夹中还包括git自动创建的master分支,使HEAD指针指向这个分支。通过commit命令将暂存区的内容提交到本地仓库
远程仓库: 不是在本地仓库中,项目代码在远程git服务器上,比如项目放在github上,就是一个远程仓库,通常使用clone命令将远程仓库拷贝到本地仓库中,开发后推送到远程仓库中即可;
常用命令
1.克隆远程仓库
git clone 远程仓库地址
一般需要先检查是否配置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 //查看本地和远程所有分支
红色的是远程仓库的分支
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
回退版本
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。
如果有不对的地方,欢迎指导
转载:欢迎转载,但未经作者同意,必须保留此段声明;