【面试宝典】Git 版本控制常用命令

发布时间 2023-08-26 13:07:07作者: 哟吼--小文文公主

一. Git 概述

  • Git 是目前世界上最先进的分布式版本控制工具,主要用于管理开发过程中的源代码文件(Java类、xml文件、html页面等),包括:

    • 代码回溯:Git在管理文件过程中会记录日志,方便回退到历史版本
    • 版本切换:Git存在分支的概念,一个项目可以有多个分支(版本),可以任意切换
    • 多人协作:Git支持多人协作,即一个团队共同开发一个项目,每个团队成员负责一部分代码,通过Git就可以管理和协调
    • 远程备份:Git通过仓库管理文件,在Git中存在远程仓库,如果本地文件丢失还可以从远程仓库获取
  • 工作原理:

    • 通过 Git 仓库来存储和管理软件开发过程中的源代码文件,Git 仓库分为两种:

      • 本地仓库:开发人员自己电脑上的 Git 仓库
      • 远程仓库:远程服务器上的 Git 仓库image.png
    • commit:提交,将本地文件和版本信息保存到本地仓库

    • push:推送,将本地仓库文件和版本信息上传到远程仓库

    • pull:拉取,将远程仓库文件和版本信息下载到本地仓库image-20210924173708313.png

  • Git、GitHub、GitLab、Gitee

    • Git:分布式版本控制工具,可以保存文件的所有修改记录,并使用版本号进行区分,可以随时浏览历史记录,抢救还原改错的文件,还可以对比不同版本的文件差异,起到恢复和保护的作用(起到合并和冲突的作用)
    • GitHub:主流的开源代码托管平台,相当于存放和管理代码的网盘,可以把自己的代码上传,进行共享和维护,也可以免费下载学习其他人的项目

二. 下载安装与配置获取

2.1 下载 Git

  • 基于 Windows 系统的官网下载
  • 安装流程(新手小白可以一直无脑 Next 直至 Finish)image.pngimage.png
  • 右击桌面出现 Open Git 表示安装成功image.png

2.2 配置 Git

  1. 打开 Git Bash,设置用户信息(输错了重新来一遍即可)
    1. 设置用户信息

git config --global user.name "Mr_Dinosaur"
git config --global user.email "Mr_Dinosaur@123.com"

  1. 查看配置信息

git config --global user.name
git config --global user.email
git config --list

2.3 解决 Gitbash 乱码问题

  1. 打开 Gitbash 执行如下命令:

git config --global core.quotepath false

  1. ${git_home}/etc/bash.bashrc 文件最后加入如下命令:

export LANG=“zh_CN.UTF-8”
export LC_ALL=“zh_CN.UTF-8”

三. 基础操作

  • Git 文件通常包含 3 种状态:

    • 已提交(committed):数据已经安全地保存在本地数据库中
    • 已修改(modified):修改了文件,但还没保存到数据库中
    • 已暂存(staged):对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中
  • 这会让 Git 项目拥有 3 个阶段:

    • 工作区(working Directory):主要用于存放开发的代码
    • 暂存区(Staging Area):临时保存修改文件的地方
    • Git 仓库(Repository):存储了很多配置信息、日志信息和文件版本信息等image.png
  • 要使用Git对我们的代码进行管理,首先需要获得Git仓库,通常有两种方式:

    • 在本地初始化 Git 本地仓库(不常用)
    • 从远程仓库克隆(常用)

3.1 获取本地仓库

  1. 在任意目录下创建空目录(如 GitTest 文件夹)作为本地 Git 仓库
  2. 进入这个目录中,右键打开 Git Bash 窗口
  3. 在本地初始化Git仓库:

git init(创建仓库)
git init -b 分支名(同时创建仓库+分支)

  1. 如果在当前目录中看到 .git 文件夹(此文件夹为隐藏文件夹)则 Git 仓库创建成功image.png

3.2 Git 本地常用命令

  1. Git工作区中的文件存在两种状态(文件的状态会随着我们执行Git的命令发生变化)
  • untracked 未跟踪(未被纳入版本控制)
  • tracked 已跟踪(被纳入版本控制)
        1)Unmodified 未修改状态
        2)Modified 已修改状态
        3)Staged 已暂存状态 image.png
  1. 使用命令切换文件状态:
    1. 创建空文件

touch Test01.txt

  1. 查看文件状态

git status

  1. 将文件的修改加入暂存区

git add Test01.txt(提交指定文件)
git add .(提交所有文件)

  1. 将暂存区的文件取消暂存 / 切换到指定版本

git reset Test01.txt(取消暂存)
git reset --hard 版本号(切换到指定版本,版本号通过 git -log 查看)

  1. 将暂存区的文件修改提交到版本库

git commit -m "提交文件到版本库"(提交说明)
**git commit ***

  1. 查看提交日志

git log
git log --all(显示所有分支)
git log --pretty=oneline(将提交信息显示为一行)
git log --abbrev-commit(使输出的 commit 更简短)
git log --graph(以图的形式显示)
git log --pretty=oneline --abbrev-commit --graph(可结合使用)

  1. 查看已删除的记录

git reflog

  1. 添加文件至忽略列表

touch .gitignore(创建一个 .gitignore 文件(文件名称固定),列出需要忽略的文件模式)

  1. 使用命令修改文件内容:
    1. 进入文件

vi Test01.txt

  1. 编辑文件模式

i
a
o
O

  1. 退出编辑模式

ESC 键

  1. 退出文件

:wq(退出并保存)
:q(退出不保存,含询问提示)
:q!(强制退出不保存,不含询问提示)

  1. 删除文件

rm -f Test01.txt(强制删除指定文件,含询问提示)
rm -rf Test01.txt(强制删除指定文件,不含询问提示,慎用)

3.3 获取远程仓库

  1. 通过 Git 提供的命令从远程仓库进行克隆,将远程仓库克隆到本地
  2. 从远程仓库克隆

git clone 远程仓库地址url

image.png

常用的托管服务:

  • GitHub:面向开源及私有软件项目的托管平台,只支持 Git 作为唯一的版本库格式进行托管
  • Gitee(码云):国内的代码托管平台,由于服务器在国内,所以相比于 GitHub 速度会更快
  • GitLab:用于仓库管理系统的开源项目,使用 Git 作为代码管理工具,并在此基础上搭建起来的 web 服务,一般用于在企业、学校等内部网络搭建 Git 私服

3.4 Git 远程常用命令

  1. 查看远程仓库:(已经克隆了远程仓库,那么至少应该能看到 origin ,这是 Git克隆的仓库服务器的默认名字)image.png

git remote

  1. 添加远程仓库:

git remote add <仓库简称> <仓库地址url>

  1. 从远程仓库克隆到本地:Git 克隆的是该 Git 仓库服务器上的几乎所有数据(包括日志信息、历史记录等),而不仅仅是复制工作所需要的文件

git clone

  1. 从远程仓库拉取:(获取最新版本并合并到本地仓库)

git pull [short-name] [branch-name]

如果当前本地仓库不是从远程仓库克隆,而是本地创建的仓库,并且仓库中存在文件,此时再从远程仓库拉取文件的时候会报错(fatal: refusing to merge unrelated histories )
解决方法:git pull --allow-unrelated-histories

  1. 推送到远程仓库:在使用 git push 命令将本地文件推送至码云远程仓库时,需要进行身份认证,认证通过才可以推送image.png

git push [remote-name] [分支名]
git push -u origin [分支名](将本地新建的分支推送远端)

3.5 Git 分支管理

  • 使用分支的意义在于:在副分支(develop/dev)上进行开发,最后合并到主分支(main/master),以免保证开发主线的稳定性

  • 每个人开发的那一部分就是一个分支,使得每个人的开发互不影响,在每个人都开发完后就将所有的代码汇总到一起,此时就要执行分支的合并操作image.png

  • 开发中分支使用原则与流程:

    • master(生产)分支:线上分支,主分支,中小规模项目作为线上运行的应用对应的分支
    • develop(开发)分支:准备上线的主要开发分支
    • develop 和 master 分支是不可删除的
    • feature/xxxx分支:从develop创建的分支,一般是同期并行开发,但不同期上线时创建的分支,分支上的研发任务完成后合并到develop分支,用完后可删除
    • hotfifix/xxxx分支:从master派生的分支,一般作为线上bug修复使用,修复测试完成后需要合并到master、test、develop分支
    • 其他分支
      • test分支(用于代码测试)
      • pre分支(预上线分支)image.png
  • 例如我们要开发新功能,可以在 develop 分支上在建一个分支,新功能一般叫做 feature 分支,开发完以后,再合并到 develop 分支上面去(而不是直接提交到 master 分支),项目做完了最后 develop 再合并到 master 分支上

  1. 常用分支命令
    1. 查看分支

git branch(显示的 *号表示所在的分支)
git branch -r(查看所有远程分支)
git branch -a(查看所有本地分支和远程分支)

  1. 创建分支

git branch 分支名(新分支会建立在当前分支的版本之上,所以会有当前分支的内容)

  1. 切换分支:(分支上的内容必须先提交,才能切换分支)

git checkout 分支名(需要先切换到目标分支上)
git checkout -b 分支名(创建新分支并切换)

  1. 合并分支

git merge 被合并的分支名称(将分支合并到 master 主线上)

  1. 重命名分支

git branch -m 原名称 新名称

  1. 删除分支

git branch -d 分支名(删除分支时,需要做各种检查)
git branch -D 分支名(不做任何检查,强制删除)

  1. 标签操作(Git 中的标签,指的是某个分支某个特定时间点的状态。通过标签,可以很方便的切换到标记时的状态)
    1. 列出已有的标签

git tag

  1. 创建标签

git tag [name]

  1. 将标签推送至远程仓库

git push [shortName] [name]

  1. 检出标签

git checkout -b [branch] [name]

  1. 解决冲突
    1. 合并分支后,多个分支对同一个文件的同一个地方进行修改的时候(不是同一个地方是不会出现冲突的),就会发生冲突
    2. 需要手动解决冲突:即手动删除文件中的一个分支,留下另一个分支
      1. 处理文件中冲突的地方
      2. 将解决完冲突的文件加入暂存区(add)
      3. 提交到仓库(commit)502459a449624c0194c21e4015580c0a.png