git 的基本使用

文章目录

一、创建仓库并初始化

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 命令查看。例如:
bash 复制代码
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. 创建并初始化仓库
bash 复制代码
mkdir /Users/xiao/pro
cd /Users/xiao/pro
git init
  1. 设置用户与邮箱
bash 复制代码
git config --local user.name 'xiao'
git config --local user.email '[email protected]'
  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 到暂存区,才能提交到版本库。例如:

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

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

2、误删文件恢复

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

八、小结

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

相关推荐
思通数科AI全行业智能NLP系统2 小时前
AI视频技术赋能幼儿园安全——教师离岗报警系统的智慧守护
大数据·人工智能·安全·目标检测·目标跟踪·自然语言处理·ocr
程序员沉梦听雨4 小时前
【Elasticsearch】入门篇
大数据·elasticsearch·搜索引擎
Gadus_5 小时前
Elasticsearch性能优化实践
大数据·elasticsearch·搜索引擎·性能优化
它说我会飞耶5 小时前
git 命令集
git
极小狐5 小时前
极狐GitLab 合并请求依赖如何解决?
运维·git·ssh·gitlab·github
riveting6 小时前
SD2351核心板:重构AI视觉产业价值链的“超级节点”
大数据·linux·图像处理·人工智能·重构·智能硬件
欧先生^_^7 小时前
Spark 的一些典型应用场景及具体示例
大数据·分布式·spark
八股文领域大手子8 小时前
如何给GitHub项目提PR(踩坑记录
大数据·elasticsearch·github
爱吃龙利鱼8 小时前
elk中kibana一直处于可用和降级之间且es群集状态并没有问题的解决方法
大数据·elk·elasticsearch
腾讯云大数据8 小时前
腾讯云ES一站式RAG方案获信通院“开源大模型+软件创新应用”精选案例奖
大数据·elasticsearch·开源·云计算·腾讯云