Git 基础:生成版本、撤消操作、版本重置、忽略文件

1. Git 的安装

git-scm.com

2. 初次运行Git前的配置

csharp 复制代码
git config --global user.name 'your name'   # 全局配置用户名
git config --global user.email 'your email' # 全局配置用户邮箱

3. 系统通用配置

Git安装目录下的/etc/gitconfig文件中,包了含系统上每一个用户及他们仓库的通用配置。

在执行 git config 时带上 --system 选项,那么它就会读写该文件中的配置变量

Git 安装目录,可以执行where git来找到

4. 初始化Git本地仓库

csharp 复制代码
git init # 初始化Git本地仓库

5. Git三大区域

6. 如何生成项目版本

  • git status 用来查看项目文件状态
  • git add 命令,用来将工作区代码的变动,提交到暂存区
git 复制代码
git add <file> <file>  # 提交指定的文件到暂存区
git add . # 将工作区所有变动提交到暂存区
  • git commit 命令,用来将暂存区的内容提交到本地仓库,git commit 后暂存区和本地版本库的内容是一致的
bash 复制代码
git commit   # 提交,最终在编辑器中输入提交的描述
git commit -m '提交描述'  # 在提交的同时,添加本次提交描述
  • git log 查看提交历史记录
bash 复制代码
git log   # 打印详细的提交历史记录
git log --oneline # 以列表形式,打印提交的历史记录(简化版)

6.1、文件的三种状态

被 Git 管理的项目,项目文件可能处于以下 3 种状态之一

  • 已修改(modified) :表示上次提交后,重新修改了的文件,但还没提交到暂存区
  • 已暂存(staged) :表示对一个已修改的文件提交到了暂存区,但还没有提交
  • 已提交(committed) :表示文件已提交到本地仓库

7. 撤消操作 Git 官方文档 - 撤消操作

主要有以下三种场景:

  • 撤消上一次提交
  • 撤销暂存的文件
  • 撤销撤销件的修改

7.1 撤消上一次提交

7.1.1 提交完了才发现提交信息写错了

sql 复制代码
git commit --amend   # 撤消上一次提交

这个命令会将暂存区中的文件提交。 如果自上次提交以来你还未做任何修改(例如,在上次提交后马上执行了此命令), 那么快照会保持不变,而你所修改的只是提交信息

7.1.2 提交后发现忘记了暂存某些需要的修改

  • 重新执行git add命令将修改内容添加到暂存区
  • 然后再重新提交,但提交时不希望生成新的版本
sql 复制代码
git commit -m 'V1-网站头部'   # 生成一个版本V1  第一次错误提交
git add .   # 将修改的内容提交到暂存区

#提交生成一个新的版本V2,该版本会替换之前的那个版本,所以最终用 git log --oneline只能看到最后一次生成的版本V2
git commit -m 'V1-网站头部导航开发完成' --amend

7.2 撤销暂存的文件

如果修改了两个文件并且想要将它们作为分开两次独立的修改提交 , 但是却意外地输入 git add * 暂存了它们两个。

  • 使用 git restore --staged <file>... 来取消暂存。
bash 复制代码
git restore --staged login.html   # 取消login.html文件的暂存

git restore --staged .  # 取消暂存区所有文件的暂存

注意:

  • git restore --staged <file> 命令只会将文件从暂存区移动到工作并且并会不会影响工作区该文件的内容。
  • 比如文件提交到暂存区时,文件内容为:'a',后面将文件内容修改为-'ab',然后执行git restore --staged <file>将文件从暂存区移除,此时工作区该文件内容仍为'ab',并不会被修改为 'a'

7.3 取消对文件的修改

如果你在上一次git add后 ,对文件login.html内容做了修改,但现在你想去掉这些修改,回到上一次git add时的样式。那你就需要撤销对login.html内容的修改。

bash 复制代码
git restore .  # 撤消对工作工所有文件的修改

8. 版本重置

Git 版本重置分为以下三种情况

  • 只重置本地仓库
  • 重置本地仓库和暂存区
  • 重置本地仓库、暂存区和工作区

8.1 重置本地仓库 (--soft)

perl 复制代码
git reset --soft 版本号    # 重置本地仓库

8.2 重置本地仓库与暂存区 (--mixed)

perl 复制代码
git reset --mixed 版本号   # 重置本地仓库和暂存区
git reset 版本号  # 重置本地仓库和暂存区,默认行为

8.3 重置本地库、暂存区、工作区(--hard)

注意:
--hard 会重置工作区内容,所以在重置前如果工作区内容有没有提交的,重置后则会造成内容丢失。内容一旦丢失,是没有办法找回的。
所以使用--hard 命令时,要特别小心。

css 复制代码
git reset --hard 版本号

8.4 git reflog 命令

git reflog命令,是可以查看到所有的版本历史记录,包括我们之前认为被 "丢弃" 的版本。

9. Git 忽略文件(.gitignore 文件)

文件.gitignore的格式规范如下:

  • 所有空行或者以 # 开头的行都会被 Git 忽略。 #为.gitignore文件的注释
bash 复制代码
# 注释
  • 可以使用标准的 glob 模式匹配,它会递归地应用在整个工作区中。 注:所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。
  • 星号(*)匹配零个或多个任意字符;
  • [abc] 匹配任何一个列在方括号中的字符 (这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);
  • 问号(?)只匹配一个任意字符;
  • 如果在方括号中使用短划线分隔两个字符, 表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。
  • 使用两个星号** 表示匹配任意中间目录,比如 a/**/z 可以匹配 a/za/b/za/b/c/z 等。
shell 复制代码
# 忽略所有以text.开头的文件,不需Git管理
text.*
# Git 忽略所有以 .o 或 .a 结尾的文件
*.[oa]
# Git忽略以 a.tmp 或b.tmp等 .tmp前面只有一个字符的tmp文件
?.tmp
# 只忽略 doc的直接子目录下的任意pdf文件,比如:doc/a.b.pdf,但不能忽略doc/a/b/c.pdf
doc/*/*.pdf
# 忽略 doc/ 目录及其所有子目录下的 .pdf 文件   如 doc/a/b.pdf  doc/a/b/c.pdf
doc/**/*.pdf
  • 匹配模式可以以(/)开头防止递归。
shell 复制代码
# 只忽略当前目录下的 demo.txt 文件,而不忽略 case/demo.txt
/demo.txt

# 忽略当前项目中所有 demo.txt文件
demo.txt
  • 匹配模式可以以(/)结尾指定目录。
bash 复制代码
# 忽略 任何目录下名为 node_modules目录下的所有文件 (git管理的是文件不是目录,所以该文件下要有内容,否则会自动忽略)
node_modules/
  • 要忽略指定模式以外的文件或目录,可以在模式前加上叹号(!)取反。
arduino 复制代码
test.*   # 忽略所有以text.开头的文件,不需Git管理

!text.html  # 不忽略text.html文件,让Git管理
相关推荐
lichenyang45328 分钟前
React 组件通讯全案例解析:从 Context 到 Ref 的实战应用
前端
姓王者34 分钟前
chen-er 专为Chen式ER图打造的npm包
前端·javascript
青莲84334 分钟前
Android Jetpack - 2 ViewModel
android·前端
崽崽的谷雨38 分钟前
react里ag-grid实现树形数据展示
前端·react.js·前端框架
栀秋66639 分钟前
就地编辑功能开发指南:从代码到体验的优雅蜕变
前端·javascript·代码规范
国服第二切图仔41 分钟前
Electron for 鸿蒙PC项目实战案例 - 连连看小游戏
前端·javascript·electron·鸿蒙pc
社恐的下水道蟑螂1 小时前
深度探索 JavaScript 的 OOP 编程之道:从基础到进阶
前端·javascript·架构
1_2_3_1 小时前
前端模块联邦介绍
前端
申阳1 小时前
Day 19:02. 基于 SpringBoot4 开发后台管理系统-项目初始化
前端·后端·程序员