基础 | 校招,你必须掌握的Git知识

开发 前端
在进行协同工作时,导师提问git的使用原理,而我却只能零星的几个命令的作用。现在就对常用的git命令的作用和原理进行总结,希望能够帮助更多人少走弯路,提升开发效率。

[[411837]]

写在前面

最近在写业务需求的时候,总是和导师的代码发生冲突,自己在处理的时候还是挺耗费时间的。导师一直提醒我更改和添加代码后要及时提交,但是我总是一股脑写完一串后才提交,没有养成良好的提交习惯。在进行协同工作时,导师提问git的使用原理,而我却只能零星的几个命令的作用。现在就对常用的git命令的作用和原理进行总结,希望能够帮助更多人少走弯路,提升开发效率。

1. git下载&配置

工欲善其事,必先利其器。你想要顺利的使用git管理代码,必须先下载和在本地配置好你的git环境。

  • 下载git工具,前往git官网自行根据电脑系统选择对应版本即可。
  • 配置和ssh账户信息,在命令行输入配置git账号信息并可以进行查看。

当然,配置git账户信息也分为项目级别和系统级别的,采用就近原则(项目级别优先于系统级别,二者都有时采用项目级别的签名),如果只有系统级别则以系统级别为准,但是不允许二者都没有。通常的,设置系统级别账户信息即可。

  1. // 创建系统级别账户信息 
  2. $ git config --global user.name "我的姓名" 
  3. $ git config --global user.email "我的邮箱" 
  4.  
  5. // 查看系统级别账户信息 
  6. $ git config --global user.name  
  7. $ git config --global user.email 

项目账户信息存储在.git/config文件中,系统账户信息存储在~/.gitconfig中。

  1. // 创建项目级别账户信息 
  2. $ git config user.name "我的姓名" 
  3. $ git config user.email "我的邮箱" 
  4.  
  5. // 查看项目级别账户信息 
  6. $ git config user.name  
  7. $ git config user.email 

3.本地生成ssh密钥,输入并执行 ssh-keygen -t rsa -C "xxxxx@xxxxx.com",如果执行成功,切换到 ~/.ssh 目录下输入命令查看vim ~/.ssh/id_rsa.pub。

图片

当然你也可以使用windows电脑在c盘下进行查找文件:

图片

4.复制公钥到github、gitlab以及码云等git仓库(切记三个平台可以使用同一个公钥)

图片
图片

5.查看ssh密钥是否配置成功

  1. //码云 
  2. ssh -T git@gitee.com 
  3. //Hi hanmeimei! You've successfully authenticated, but GITEE.COM does not provide shell access.表示连接成功  
  4.  
  5. //github 
  6. ssh -T git@github.com 
  7. //Hi hanmeimei! You've successfully authenticated, but GitHub does not provide shell access.表示连接成功。 

经历了以上五步,你就已经顺利完成了git环境的配置,可以和git进行愉快地玩耍了。之所以让你配置那么多,这是因为可以让你避免使用需要你频繁输入账户和密码的https方式。具体的,通过ssh配置git可以通过本地私钥和远程仓库配置的公钥进行匹配,判读是否为一对密钥,可以让你开发效率得以提升。

前面只是开胃菜,接下来将呈上正菜,硬菜干货。

二. git简要概述

一句话概括:git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何项目。

git的特点

git最核心的特点就是分布式,其实就是去中心化,让它之间的依赖变弱。它是按照元数据方式存储内容数据,将文件的元信息通过SHA-1哈希算法进行处理隐藏在类似.svn、.cvs等文件中。

图片

git的其它几个特点是:

  • 协同修改,多人并行不悖地修改同一服务器的同一文件。
  • 数据备份,不仅保存目录和文件的当前状态,还能够保存每个提交过的历史状态。
  • 版本管理,在保存每个版本的文件信息时,要做到不重复保存数据,节约存储空间,提升运行效率。
  • 权限控制,对团队成员进行权限控制,对团队外开发者的代码进行审核提交。
  • 历史记录,查看修改人员、修改时间、修改内容、日志信息等,将本地文件回复到某一个历史状态。
  • 分支管理, 允许开发团队在工作过程中多条生产线并行工作,提升工作效率。

git的工作区域和流程

关于git是如何进行工作和代码管理的,那么我们得先去了解git的工作区域是如何划分的,这样我们才能在合适的区域使用合适的命令。

在本地系统中的git划分为:工作区、暂存区和本地库(版本库),它们的大致作用如下:

  • 工作区(Workspace):就是本地系统的文件目录,是当前开发过程中看到的最新代码
  • 暂存区(Index):在执行git add命令后,工作区的文件就临时存储在暂存区中,而暂存区就会对当前移入的文件进行标记索引(index),告知那些文件是被git管理的。(在实际开发中,要养成使用git暂存代码的好习惯,完成某个需求或功能后立刻使用git add 提交到暂存区,防止自己手贱删除)。
  • 本地库(Respository):本地系统作为本地仓库存储着开发项目的历史版本,在执行git commit命令后便会将提交暂存区的内容到本地仓库存储。
图片

本地系统的git工作区域

在上图所示流程中,我们可以看到本地库也是栈存储的,在最后提交的文件会存放在最上面,在进行git回滚的时候取得head文件也是最后一次提交的文件内容。

当然将项目文件只存储在本地仓库是没有任何意义的,我们使用git的目的不就是为了协同开发嘛?那么我们就应该将代码从本地库上传到远程库。

  • 远程库(Remote):就是用来托管代码的服务器作为远程仓库,通过执git push命令将代码从本地库同步到远程库中,这样便能实现仓库内容分布在多个地点多个电脑进行协同操作。
图片

完整的git工作区域

简而言之,git的工作流程就是:

  • 在工作区修改、添加文件
  • 将工作区中操作后的代码通过git add添加到暂存区
  • 将暂存区的文件通过git commit提交到本地仓库
  • 将本地库的修改通过git push推送到远程库,方便分布协同工作

三. git常用命令

git的工作就是创建和保存项目的快照以及与之后的快照进行对比,接下来就让我们上手实践git常用命令。

创建本地仓库和链接远程仓库

  • git init:在本项目目录下创建本地仓库
  • git remote add origin:将本地仓库与远程仓库进行链接,origin默认是远程仓库的别名url

查询操作

文档查询

  • git help (--help):查询git命令的帮助信息
  • git help -a:查询git命令大纲全部信息列表
  • git help:查询具体命令说明手册

状态查询

  • git status:查看本地系统的git状态
  • git reflog:查看git历史操作记录信息
  • git log:查看git操作日志

文件提交 git commit

  • git commit:提交暂存文件到本地库,会打开编辑器进行编辑。
  • git commit -m "filename message":提交暂存文件到本地库,记录下提交文件的备注。
  • git commit -am:提交暂存文件到本地库,等价于git add . && git commit -m。
  • git commit --amend:提交暂存文件到本地库,对最近的一次提交信息进行修改,会修改commit的hash值。

拉取文件 git pull

  • git pull <远程主机名> <远程分支名>:<本地分支名>:从远程仓库拉取代码合并到本地工作区,当然日常拉取可以简写为git pull等价于git fetch && git merge。
  • git pull --rebase <远程主机名> <远程分支名>:<本地分支名>:使用rebase模式进行合并

拉取远程更改文件 git fetch

git fetch和git pull都是进行远程文件拉取,区别在于git pull是将指定分支的所有文件合并到本地,而git fetch是将指定分支的更新文件进行拉取,但是不会进行合并

  • git fetch <远程主机名> <远程分支名>:<本地分支名>:从远程仓库拉取指定分支的更新内容到本地指定分支。
  • git fetch --all:从远程仓库拉取所有分支的更新内容

分支管理

  • git branch:查看本地分支
  • git branch -r:查看远程分支
  • git branch -a:查看本地和远程分支
  • git checkout <其它分支>:从当前分支切换到其它分支
  • git checkout -b <新建分支名>:创建并切换到新建分支
  • git branch -d <待删除的分支名>:删除指定的本地分支
  • git merge <指定分支名>:将当前分支与指定分支进行合并
  • git branch -m <旧分支名>:<新分支名>,将旧分支名更改为新分支名
  • git branch --merged:查看当前有哪些分支已与当前所处分支合并
  • git branch --no-merged:查看当前有哪些分支尚未与当前分支合并
  • git branch -v:查看本地的各个分支最后一次提交对象的信息
  • git branch -b <本地分支名> <远程分支名>,拉取远程分支并创建本地分支

撤销操作

git checkout --:撤销工作区的修改操作

git reset HEAD:撤销暂存区的最后一次提交操作(不会覆盖工作区)

git reset --(soft|mixed|hard) |<指定commit id>:将当前代码回滚到指定版本

  • --hard指的是回滚全部代码,包括HEAD、index、工作树
  • --mixed指的是回滚部分代码,包括HEAD、index
  • --soft指的是只回退到HEAD

差异比较

  • git diff:用于比较当前工作区和暂存区的文件差异
  • git diff --cached:比较暂存区和本地库最近一次commit提交的内容
  • git diff HEAD:比较工作区和本地库最近一次commit提交的内容

思维导图

图片

小结

在本篇文章中是笔者在工作实际开发和阅读文章总结的,可以快速让你上手git开发,事半功倍,希望对你工作和招聘有所帮助。

 

责任编辑:姜华 来源: 前端万有引力
相关推荐

2017-10-11 15:50:18

光纤通信传输

2023-09-14 11:45:24

HashMap散列表

2019-08-07 15:20:08

Git开源命令

2011-05-20 13:52:31

2021-08-04 07:47:19

HTTP网络协议

2023-10-12 18:00:34

Git系统命令

2019-06-20 17:39:12

Android启动优化

2020-11-29 16:52:13

数据库SQL数据分析

2017-12-07 15:47:25

2017-12-07 15:28:36

2021-10-21 08:13:11

Springboot

2020-12-10 11:00:37

JavaJVM命令

2009-11-23 16:14:41

Cisco路由器知识

2021-04-07 07:48:00

测试开发Java反射Spring

2015-11-03 09:38:51

微交互趋势

2010-08-02 16:20:31

ICMP协议

2020-04-08 17:10:03

GitHub代码开源

2021-03-01 07:34:42

Java泛型ArrayList

2009-08-02 12:21:22

服务器双核处理器

2021-01-05 14:27:12

SQL数据库开发
点赞
收藏

51CTO技术栈公众号