当前位置: 首页 > news >正文

git 的基本使用

文章目录

    • 一、创建仓库并初始化
      • 1、操作步骤
      • 2、注意事项
    • 二、工作区与版本库
      • 1、Git 管理文件类型
      • 2、Git 保存文件方式
      • 3、工作区与版本库概念及操作
    • 三、命令小结
    • 四、版本回退与前进
      • 1、相关概念
      • 2、版本回退
      • 3、版本前进
      • 4、总结
    • 五、撤销修改
      • 1、场景 1
      • 2、场景 2
      • 3、场景 3
      • 4、注意事项
    • 六、管理修改
    • 七、删除文件
      • 1、删除文件操作
      • 2、误删文件恢复
    • 八、小结

一、创建仓库并初始化

1、操作步骤

  1. 创建仓库:使用 mkdir 命令创建目录,例如 mkdir /Users/xiao/pro
  2. 初始化仓库:进入创建的目录,使用 git init 命令初始化,使该目录可被 Git 管理,如 cd /Users/xiao/pro 后执行 git init

2、注意事项

  1. 版本库概念:版本库(仓库,repository)可理解为一个目录,其中所有文件的修改、删除等操作都能被 Git 跟踪,方便追踪历史和还原。
  2. .git 目录:在仓库目录下执行 git init 后会生成隐藏的 .git 目录,用于跟踪管理版本库,不要手动修改其中文件,否则会破坏 Git 仓库。
  3. Windows 系统:为避免问题,确保目录名(包括父目录)不包含中文。
  4. 命令执行位置:后续的 git 命令需在仓库目录下执行。

二、工作区与版本库

1、Git 管理文件类型

Git 主要管理文本文件,对文本文件的改动跟踪效果好,能精确记录每行的修改。而对于图片、视频等二进制文件,虽能管理,但无法跟踪具体变化,只能记录文件大小的改变。Microsoft Word 是二进制格式,版本控制系统无法跟踪其改动,建议使用纯文本方式编写文件,并使用 UTF - 8 编码。Windows 用户不要使用自带记事本编辑文本文件,建议使用 Notepad++ 并将默认编码设置为 UTF - 8 without BOM。

2、Git 保存文件方式

Git 每次提交版本保存的是文件内容的完整快照。对于已变化的文件,保存完整内容;未变化的文件只保存上一个版本的指针。Git 适合保存文本文件,能进行很好的压缩和差异分析;对于二进制文件,压缩比率低,占用空间几乎随提交次数线性增长。

3、工作区与版本库概念及操作

  1. 工作区:即仓库目录,是开发程序所在目录。提交版本后,Git 会自动检测自该版本之后仓库目录下文件的改动(增、删、改),可使用 git status 命令查看。例如:
cd /Users/xiao/pro
git status
echo "hello xiao" >> readme.txt
git status
  1. 版本库:即仓库目录下的 .git 目录,不属于工作区。将修改内容提交为新版本的步骤如下:
    • 添加到暂存区:使用 git add 命令,可添加单个文件(git add 文件 1)、多个文件(git add 文件 1 文件 2)或整个当前目录(git add .),也可多次执行 add 操作。
    • 提交到版本库分支:使用 git commit -m '提交信息' 命令。执行该命令时,可能需配置用户和邮箱,使用 git config --local user.name '用户名'git config --local user.email '邮箱' 进行配置。
    • 查看版本记录:使用 git log 命令,若嫌输出信息多,可加上 --pretty=oneline 参数。

三、命令小结

  1. 创建并初始化仓库
mkdir /Users/xiao/pro
cd /Users/xiao/pro
git init
  1. 设置用户与邮箱
git config --local user.name 'xiao'
git config --local user.email 'xiao@example.com'
  1. 查看 Git 当前状态git status
  2. 将检测到修改的文件添加到暂存区git add 文件名
  3. 将暂存区的文件提交到版本库的分支git commit -m '提交信息'
  4. 查看提交记录git loggit log --pretty=oneline

四、版本回退与前进

1、相关概念

创建 Git 版本库时,Git 自动创建 master 分支,git commit 是往 master 分支提交更改。版本库中有暂存区(stage 或 index)、master 分支以及指向 master 的指针 HEADHEAD 指向当前在用版本。

2、版本回退

从当前版本回退到过去的版本,Git 仅将 HEAD 指向指定版本,并更新工作区文件。例如当前版本为版本 3,回退到版本 1 的操作如下:

  1. 查看版本信息git log --pretty=oneline
  2. 回滚到上一个版本
    • 方式 1:使用 HEAD^ 表示上一个版本,HEAD^^ 表示上上个版本,HEAD~n 表示上上上…n 个版本,如 git reset --hard HEAD^git reset --hard HEAD~2
    • 方式 2:使用 git log 查询出的 commit id 号,如 git reset --hard 353b5afb8784f0e19c8dab83be1cb97a93b13bd4

3、版本前进

从当前版本前进到未来的版本,当使用 git log 查看时,最新版本可能会不见。可使用 git reflog 查看命令历史,获取 commit id 后进行前进操作。例如当前版本为版本 1,前进到版本 3 的操作如下:

  1. 查看命令历史git reflog
  2. 前进到指定版本git reset --hard 87e199e

4、总结

  1. 使用 git reset --hard commit_id 可在版本历史之间穿梭。
  2. 回退版本前,用 git log 查看提交历史确定回退版本。
  3. 前进版本时,用 git reflog 查看命令历史确定前进版本。

五、撤销修改

1、场景 1

已提交不合适的修改到版本库,且未推送到远程库,可参考版本回退操作。

2、场景 2

文件内容已提交到版本库,之后修改并添加到暂存区,又再次修改。撤销操作如下:

  1. 执行 git reset HEAD 将文件从暂存区拿回工作区。
  2. 执行 git checkout -- 将工作区的修改还原到上一次 git commit 的状态。

3、场景 3

文件内容从未提交到版本库,修改并添加到暂存区,又再次修改。执行 git checkout -- 将工作区的修改还原到 git add 时文件的内容。

4、注意事项

git checkout -- file 命令中的 -- 很重要,没有 -- 就变成了“切换到另一个分支”的命令。

六、管理修改

Git 跟踪并管理的是修改,而非文件。每次修改都需先 add 到暂存区,才能提交到版本库。例如:

echo "hello" > a.txt
git add a.txt
echo "world" >> a.txt
git commit -m "版本 1"
git status
git diff HEAD -- a.txt

可选择将后续修改也 add 到暂存区后再 commit 一个新版本,或先将多次修改合并 add 后再提交一个版本。

七、删除文件

1、删除文件操作

  1. 添加并提交文件
git add test.txt
git commit -m "v1"
  1. 删除文件:可在文件管理器中删除或使用 rm 命令,此时工作区和版本库不一致,git status 会提示文件被删除。
  2. 从版本库中删除文件:使用 git rm 命令删除文件并 git commit,如:
git rm test.txt
git commit -m "remove test.txt"

也可先手动删除文件,再使用 git rmgit add,效果相同。

2、误删文件恢复

若删错文件,可使用 git checkout -- test.txt 命令将误删的文件恢复到最新版本。但从来没有被添加到版本库就被删除的文件,无法恢复。

八、小结

git rm 用于删除文件。已提交到版本库的文件不用担心误删,但只能恢复到最新版本,会丢失最近一次提交后修改的内容。

相关文章:

  • RTMP 入门指南
  • 【语法】C++的stack和queue
  • 零基础快速搭建AI绘画网站!用Gradio玩转Stable Diffusion
  • Langchain入门介绍
  • Spring @Transactional 自调用问题深度解析
  • C语言----函数栈帧讲解
  • 抖音IP属地跟无线网有关系吗?一文解析
  • 【智慧城市】新中地GIS开发实训:基于 Vue 框架的武汉智慧旅游系统
  • http协议详解附带c/c++服务器和客户端源码
  • 在统信UOS/麒麟Kylin OS中创建网页桌面快捷方式
  • 反序列化漏洞1
  • python pymysql如何保证数据库更新成功
  • 12.thinkphp验证
  • 隧道调频广播覆盖的实现路径:隧道无线广播技术赋能行车安全升级,隧道汽车广播收音系统助力隧道安全管理升级
  • 海量信息处理分析有效决策
  • 控件和QWidget核心属性
  • Android——Activity与Fragment通信
  • SpringBoot 常用注解大全
  • 智能分析网关摄像机实时接入分析平台,如何开启周界防护智能新时代?
  • Allegro23.1新功能之将差分过孔替换成via structure操作指导
  • 银川市长信箱被指“已读乱回”,官方通报:对相关责任人问责处理
  • 杭州打造商业航天全产业链,请看《浪尖周报》第22期
  • 人民日报读者点题:规范涉企执法,怎样防止问题反弹、提振企业信心?
  • 持续更新丨伊朗官员:港口爆炸事件已致5人死亡
  • 读科学发展的壮丽史诗,也读普通人的传奇
  • 委员呼吁提高政府机构电话号码准确性,辽宁阜新回应