【面试宝典】Git 版本控制常用命令
一. Git 概述
-
Git 是目前世界上最先进的分布式版本控制工具,主要用于管理开发过程中的源代码文件(Java类、xml文件、html页面等),包括:
- 代码回溯:Git在管理文件过程中会记录日志,方便回退到历史版本
- 版本切换:Git存在分支的概念,一个项目可以有多个分支(版本),可以任意切换
- 多人协作:Git支持多人协作,即一个团队共同开发一个项目,每个团队成员负责一部分代码,通过Git就可以管理和协调
- 远程备份:Git通过仓库管理文件,在Git中存在远程仓库,如果本地文件丢失还可以从远程仓库获取
-
工作原理:
-
通过 Git 仓库来存储和管理软件开发过程中的源代码文件,Git 仓库分为两种:
- 本地仓库:开发人员自己电脑上的 Git 仓库
- 远程仓库:远程服务器上的 Git 仓库
-
commit:提交,将本地文件和版本信息保存到本地仓库
-
push:推送,将本地仓库文件和版本信息上传到远程仓库
-
pull:拉取,将远程仓库文件和版本信息下载到本地仓库
-
-
Git、GitHub、GitLab、Gitee
- Git:分布式版本控制工具,可以保存文件的所有修改记录,并使用版本号进行区分,可以随时浏览历史记录,抢救还原改错的文件,还可以对比不同版本的文件差异,起到恢复和保护的作用(起到合并和冲突的作用)
- GitHub:主流的开源代码托管平台,相当于存放和管理代码的网盘,可以把自己的代码上传,进行共享和维护,也可以免费下载学习其他人的项目
二. 下载安装与配置获取
2.1 下载 Git
- 基于 Windows 系统的官网下载
- 安装流程(新手小白可以一直无脑 Next 直至 Finish)
- 右击桌面出现 Open Git 表示安装成功
2.2 配置 Git
- 打开 Git Bash,设置用户信息(输错了重新来一遍即可)
- 设置用户信息:
git config --global user.name "Mr_Dinosaur"
git config --global user.email "Mr_Dinosaur@123.com"
- 查看配置信息:
git config --global user.name
git config --global user.email
git config --list
2.3 解决 Gitbash 乱码问题
- 打开 Gitbash 执行如下命令:
git config --global core.quotepath false
- ${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):存储了很多配置信息、日志信息和文件版本信息等
-
要使用Git对我们的代码进行管理,首先需要获得Git仓库,通常有两种方式:
- 在本地初始化 Git 本地仓库(不常用)
- 从远程仓库克隆(常用)
3.1 获取本地仓库
- 在任意目录下创建空目录(如 GitTest 文件夹)作为本地 Git 仓库
- 进入这个目录中,右键打开 Git Bash 窗口
- 在本地初始化Git仓库:
git init(创建仓库)
git init -b 分支名(同时创建仓库+分支)
- 如果在当前目录中看到 .git 文件夹(此文件夹为隐藏文件夹)则 Git 仓库创建成功
3.2 Git 本地常用命令
- Git工作区中的文件存在两种状态(文件的状态会随着我们执行Git的命令发生变化)
- untracked 未跟踪(未被纳入版本控制)
- tracked 已跟踪(被纳入版本控制)
1)Unmodified 未修改状态
2)Modified 已修改状态
3)Staged 已暂存状态
- 使用命令切换文件状态:
- 创建空文件:
touch Test01.txt
- 查看文件状态:
git status
- 将文件的修改加入暂存区:
git add Test01.txt(提交指定文件)
git add .(提交所有文件)
- 将暂存区的文件取消暂存 / 切换到指定版本:
git reset Test01.txt(取消暂存)
git reset --hard 版本号(切换到指定版本,版本号通过 git -log 查看)
- 将暂存区的文件修改提交到版本库:
git commit -m "提交文件到版本库"(提交说明)
**git commit ***
- 查看提交日志:
git log
git log --all(显示所有分支)
git log --pretty=oneline(将提交信息显示为一行)
git log --abbrev-commit(使输出的 commit 更简短)
git log --graph(以图的形式显示)
git log --pretty=oneline --abbrev-commit --graph(可结合使用)
- 查看已删除的记录:
git reflog
- 添加文件至忽略列表:
touch .gitignore(创建一个 .gitignore 文件(文件名称固定),列出需要忽略的文件模式)
- 使用命令修改文件内容:
- 进入文件:
vi Test01.txt
- 编辑文件模式:
i
a
o
O
- 退出编辑模式:
ESC 键
- 退出文件:
:wq(退出并保存)
:q(退出不保存,含询问提示)
:q!(强制退出不保存,不含询问提示)
- 删除文件:
rm -f Test01.txt(强制删除指定文件,含询问提示)
rm -rf Test01.txt(强制删除指定文件,不含询问提示,慎用)
3.3 获取远程仓库
- 通过 Git 提供的命令从远程仓库进行克隆,将远程仓库克隆到本地
- 从远程仓库克隆:
git clone 远程仓库地址url
常用的托管服务:
- GitHub:面向开源及私有软件项目的托管平台,只支持 Git 作为唯一的版本库格式进行托管
- Gitee(码云):国内的代码托管平台,由于服务器在国内,所以相比于 GitHub 速度会更快
- GitLab:用于仓库管理系统的开源项目,使用 Git 作为代码管理工具,并在此基础上搭建起来的 web 服务,一般用于在企业、学校等内部网络搭建 Git 私服
3.4 Git 远程常用命令
- 查看远程仓库:(已经克隆了远程仓库,那么至少应该能看到 origin ,这是 Git克隆的仓库服务器的默认名字)
git remote
- 添加远程仓库:
git remote add <仓库简称> <仓库地址url>
- 从远程仓库克隆到本地:Git 克隆的是该 Git 仓库服务器上的几乎所有数据(包括日志信息、历史记录等),而不仅仅是复制工作所需要的文件
git clone
- 从远程仓库拉取:(获取最新版本并合并到本地仓库)
git pull [short-name] [branch-name]
如果当前本地仓库不是从远程仓库克隆,而是本地创建的仓库,并且仓库中存在文件,此时再从远程仓库拉取文件的时候会报错(fatal: refusing to merge unrelated histories )
解决方法:git pull --allow-unrelated-histories
- 推送到远程仓库:在使用 git push 命令将本地文件推送至码云远程仓库时,需要进行身份认证,认证通过才可以推送
git push [remote-name] [分支名]
git push -u origin [分支名](将本地新建的分支推送远端)
3.5 Git 分支管理
-
使用分支的意义在于:在副分支(develop/dev)上进行开发,最后合并到主分支(main/master),以免保证开发主线的稳定性
-
每个人开发的那一部分就是一个分支,使得每个人的开发互不影响,在每个人都开发完后就将所有的代码汇总到一起,此时就要执行分支的合并操作
-
开发中分支使用原则与流程:
- master(生产)分支:线上分支,主分支,中小规模项目作为线上运行的应用对应的分支
- develop(开发)分支:准备上线的主要开发分支
- develop 和 master 分支是不可删除的
- feature/xxxx分支:从develop创建的分支,一般是同期并行开发,但不同期上线时创建的分支,分支上的研发任务完成后合并到develop分支,用完后可删除
- hotfifix/xxxx分支:从master派生的分支,一般作为线上bug修复使用,修复测试完成后需要合并到master、test、develop分支
- 其他分支
- test分支(用于代码测试)
- pre分支(预上线分支)
-
例如我们要开发新功能,可以在 develop 分支上在建一个分支,新功能一般叫做 feature 分支,开发完以后,再合并到 develop 分支上面去(而不是直接提交到 master 分支),项目做完了最后 develop 再合并到 master 分支上
- 常用分支命令
- 查看分支:
git branch(显示的 *号表示所在的分支)
git branch -r(查看所有远程分支)
git branch -a(查看所有本地分支和远程分支)
- 创建分支:
git branch 分支名(新分支会建立在当前分支的版本之上,所以会有当前分支的内容)
- 切换分支:(分支上的内容必须先提交,才能切换分支)
git checkout 分支名(需要先切换到目标分支上)
git checkout -b 分支名(创建新分支并切换)
- 合并分支:
git merge 被合并的分支名称(将分支合并到 master 主线上)
- 重命名分支:
git branch -m 原名称 新名称
- 删除分支:
git branch -d 分支名(删除分支时,需要做各种检查)
git branch -D 分支名(不做任何检查,强制删除)
- 标签操作(Git 中的标签,指的是某个分支某个特定时间点的状态。通过标签,可以很方便的切换到标记时的状态)
- 列出已有的标签:
git tag
- 创建标签:
git tag [name]
- 将标签推送至远程仓库:
git push [shortName] [name]
- 检出标签:
git checkout -b [branch] [name]
- 解决冲突
- 合并分支后,多个分支对同一个文件的同一个地方进行修改的时候(不是同一个地方是不会出现冲突的),就会发生冲突
- 需要手动解决冲突:即手动删除文件中的一个分支,留下另一个分支
- 处理文件中冲突的地方
- 将解决完冲突的文件加入暂存区(add)
- 提交到仓库(commit)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战