常见git用法

96 阅读4分钟

git

什么是版本控制

  • 帮助程序员进行代码的追踪、维护、控制等等一系列的操作

版本控制的功能

  • 不同版本的存储管理

  • 重大版本的备份维护

  • 恢复之前的项目版本

  • 记录项目

  • 多人开发的代码合并

集中式版本控制

CVS和SVN都属于集中式版本控制

特点:

同步、追溯、备份

  • 同步:让所有参与开发的程序员对代码的变更能够同步,最终得到相同的代码内容
  • 追溯:可以回退到历史中的任何一个版本,便于查看版本变更内容
  • 备份:对代码进行备份

缺点

代码开发、提交、提取都必须在有网环境下,必须依靠互联网才能工作,若是开发者处于网络环境不佳的地区,这会大大降低开发效率。再者,若是中心数据库所在的磁盘发生损坏,又没有进行备份,则数据就会丢失。

分布式版本控制

为了解决集中式版本控制的一些缺点,分布式版本控制应运而生,并且慢慢成为主流,目前大多数公司都采用分布式版本控制,git就属于分布式版本控制。

相较于集中式版本控制,分布式版本控制的仓库可以有很多份,在每个开发者的电脑上都存在git的完整仓库,这个完整的仓库记录git的所有提交历史。开发者可以直接在自己的电脑上对服务器中的代码进行提交、分支、合并、回退等操作。这样一来,任何协同工作使用的服务器发生故障,都可以很好的保存仓库。

git安装

  • 官网地址:git-scm.com/

  • 根据自己的操作系统进行下载安装git即可

git配置

  • 配置用户名和邮箱(每次git提交都会使用这些信息)

    git config  --global user.name "用户名"
    git config  --global user.email "邮箱"
    
  • 查看配置信息

    git config --list
    

image-20230203155549477.png

使用git

  • 初始化git仓库

    git init
    

    该命令会在项目文件里创建一个.git的文件,但是项目里面的文件还没被跟踪,仅仅做了一个初始化的操作。

  • 从远程克隆仓库

    git clone <远程仓库地址>
    
  • 文件状态

image-20230203172743913.png

  • 未跟踪 -----> 暂存

    git add <文件名>   #将某个文件切换到暂存状态
    git add .       #将所有已经修改的文件切换到暂存状态
    
  • 暂存 -----> 未修改

    git commit -m "提交信息"      #提交暂存文件到仓库中
    git commit -a -m "提交信息"   #提交所有已修改文件
    
  • 查看文件状态

    git status
    
  • 忽略配置文件

    在开发项目中,有些文件不需要使用git管理,例如:node_modules、/dist文件等,则可以使用.gitignore文件,在这个文件中列出不需要git管理的文件。

  • 查看提交历史

    git log
    git log --pretty=oneline
    git log --pretty=oneline --graph
    
  • 回到以前版本

    git reset --hard HEAD^
    git reset --hard HEAD~1000
    git reset --hard commit id
    

    git通过HEAD指针来记录当前版本,它指向当前分支的最后一次提交,回退到以前版本主要是改变HEAD指针指向。

image-20230203182242490.png

远程仓库(Remote Repository)

在实际的项目开发过程中,通常需要多人协作开发,为了使仓库可以被多人同时访问使用,所以采用远程仓库。目前常用的远程仓库有:GitHub、Gitee

远程仓库的使用

  • 查看远程仓库

    git remote
    git remote -v
    
  • 添加远程仓库

    git remote add <远程仓库名> <url>
    
  • 从远程仓库中拉取并自动合并

    git pull    #相当于(git fetch + git merge) 
    
  • 推送到远程仓库

    git push <远程仓库> <本地分支>:<远程分支>
    

    注意:如果推送失败,查看本地版本和远程版本是否保持一致

git标签tag

git可以给仓库中的某一个提交打上标签(tag),以示重要,例如:v1.0.0、v2.0.0等。设置标签后,可以通过标签实现版本回溯。

  • 打上标签

    git tag <标签名>
    
  • 查看所有标签

    git tag -l  
    
  • 附注标签

    git tag -a <标签名> -m "附注标签" 
    
  • 删除标签

    git tag -d <标签名> 
    
  • 检出标签

    git checkout <标签名>
    

分支

git默认情况下只有一个分支(master/main),在使用git时可以创建多个分支,在不同分支上编写不同功能,分支与分支之间相互独立,在一个分支上修改代码不会影响到其它分支。

  • 创建分支

    git branch <分支名>
    
  • 查看分支

    git branch
    
  • 切换分支

    git switch <分支名>
    
  • 创建并切换分支

    git switch -c <分支名>
    
  • 删除分支

    git branch -d <分支名>
    
  • 合并分支

    git merge <分支名>
    

变基(rebase)

在git中整合来自不同分支的修改主要有两种方法:merge和rebase。merge会记录所有git的提交历史记录,分支会变得错综复杂,而rebase可以简化历史记录,将两个分支的历史简化,但是永远不要在主分支上使用rebase。

变基前:

image-20230204204959720.png

变基后:

image-20230204205009933.png