一文学会Git代码版本控制

命令总结

命令作用注意
git -v查看 git 版本
git init初始化 git 仓库
git add 文件标识暂存某个文件文件标识以终端为起始的相对路径
git add .暂存所有文件
git commit -m '说明注释' 提交产生版本记录每次提交,把暂存区内容快照一份
git status查看文件状态 - 详细信息
git status -s查看文件状态 - 简略信息第一列是暂存区状态,第二列是工作区状态
git ls-files查看暂存区文件列表
git restore 文件标识从暂存区恢复到工作区如果文件标识为 . 则恢复所有文件
git rm --cached 文件标识从暂存区移除文件不让 git 跟踪文件变化
git log查看提交记录 - 详细信息
git log --oneline查看提交记录 - 简略信息版本号 分支指针 提交时说明注释
git reflog --oneline查看完整历史 - 简略消息包括提交,切换,回退等所有记录
git reset 版本号切换版本代码到暂存区和工作区--soft 模式保留暂存区和工作区原本内容
--hard 模式不保留暂存区和工作区原本内容
--mixed 模式不保留暂存区,工作区保留(默认)先覆盖到暂存区,再用暂存区对比覆盖工作区
git branch 分支名创建分支
git branch查看本地分支
git branch -d 分支名删除分支请确保记录已经合并到别的分支下,再删除分支
git checkout 分支名切换分支
git checkout -b 分支名创建并立刻切换分支
git merge 分支名把分支提交历史记录合并到当前所在分支
git remote add 远程仓库别名 远程仓库地址添加远程仓库地址别名唯一,地址是 .git 结尾的网址
git remote -v查看远程仓库地址
git remote remove 远程仓库别名删除远程仓库地址
git pull 远程仓库别名 分支名拉取完整写法:git pull 远程仓库别名 远程分支名:本地分支名等价于:git fetch 和 git merge
git push 远程仓库别名 分支名推送完整写法:git push 远程仓库别名 本地分支名:远程分支名
git push -u:建立通道后以后可以简写 git push
git clone 远程仓库地址克隆从0得到一个远程的Git仓库到本地使用

一、安装

Git 是一个 分布式版本控制系统,用于跟踪和管理文件(尤其是代码)的变化,旨在帮助开发者高效协作和管理项目历史记录。

1) 下载

直接下载,一直下一步,无需额外配置
https://git-scm.com/downloads
下载安装完成之后,打开 git bash,输入git --version查看git版本
在这里插入图片描述

2) 配置用户信息

配置:用户名和邮箱,应用在每次提交代码版本时表明自己身份
命令:
git config --global user.name "paran"
git config --global user.email "paran@example.com"
在这里插入图片描述
git config --list查看配置
在这里插入图片描述

二、Git仓库

.git 目录是 Git 的核心数据库,存储了版本控制所需的所有元数据和对象。它是运行 git init 或 git clone 时自动创建的隐藏文件夹(默认不可见)。

三、Git的三个区域

  1. 工作区:实际开发时操作的文件夹
  2. 暂存区:保存之前的准备区域(暂存改动过的文件)
  3. 版本库:提交并保存暂存区的内容,产生一个版本快照
命令作用
git add 文件名暂存指定文件
git add .暂存所有改动文件
git commit -m “注释说明”提交并保存,产生版本快照

在这里插入图片描述

klwu4@klwu4-tvmbq-28 MINGW64 /d
$ cd git_study/

klwu4@klwu4-tvmbq-28 MINGW64 /d/git_study
$ git init
Initialized empty Git repository in D:/git_study/.git/

klwu4@klwu4-tvmbq-28 MINGW64 /d/git_study (master)
$ git add ./page/login/index.css

klwu4@klwu4-tvmbq-28 MINGW64 /d/git_study (master)
$ git add .

klwu4@klwu4-tvmbq-28 MINGW64 /d/git_study (master)
$ git commit -m "登录页面"
[master (root-commit) f688ea7] 登录页面
 1 file changed, 46 insertions(+)
 create mode 100644 page/login/index.css

四、文件状态

Git 文件 2 种状态:

  1. 未跟踪:新文件,从未被 Git 管理过
  2. 已跟踪:Git已经知道和管理的文件
文件状态概念场景
未跟踪(U)从未被Git管理过新文件
新添加(A)第一次被Git暂存之前版本记录无此文件
未修改(‘’)三个区域统一提交保存后
已修改(M)工作区内容变化修改了内容

使用git status -s可以查看文件状态
在这里插入图片描述
第一个M代表暂存区状态
第二个M代表工作区状态

MM就表示

  1. 文件在版本库中存在且暂存区该文件的内容发生变化
  2. 上一次git add 完之后工作区该文件内容又发生变化但未 git add 到暂存区

类似地,AM表示

  1. 该文件不在版本库中,且执行过git add(注意,执行多次git add还是A的标识,只有commit 之后,git add两次才会显示的是M)
  2. 上一次git add 完之后工作区该文件内容又发生变化但未 git add 到暂存区

五、暂存区使用

暂存区 -> 覆盖 -> 工作区,命令:git restore 目标文件(注

klwu4@klwu4-tvmbq-28 MINGW64 /d/git_study (master)
$ git restore ./page/login/index.html

从暂存区移除文件,命令:git rm --cached 目标文件

klwu4@klwu4-tvmbq-28 MINGW64 /d/git_study (master)
$ git rm --cached ./page/login/index.css
rm 'page/login/index.css'

六、Git回退版本

git log --oneline查看提交历史
git reflog --oneline 查看所有 Git 操作记录

如果用git回退到第一版了,git log --oneline就看不到第二版、第三版的版本号了,可以用git reflog --oneline 查看所有 Git 操作记录,找到第二版、第三版的版本号,然后还可以恢复到对应版本

klwu4@klwu4-tvmbq-28 MINGW64 /d/git_study (master)
$ git log --oneline
e106243 (HEAD -> master) 第三次提交js文件
9aa6334 第二次提交css文件
eb624dd 第一次提交html文件

回退命令:

命令影响范围适用场景
git reset --soft仅移动 HEAD,不修改暂存区和工作目录撤销提交但保留更改
git reset --hard移动 HEAD + 重置暂存区 + 丢弃工作目录更改彻底回退,丢弃所有更改
git reset --mixed(默认)移动 HEAD + 重置暂存区,但保留工作目录撤销提交和暂存,但保留文件修改

在这里插入图片描述
演示
git reset --soft 版本号

klwu4@klwu4-tvmbq-28 MINGW64 /d/git_study (master)
$ git log --oneline
74437c9 (HEAD -> master) 第三次提交js文件
bb123ab 第二次提交css文件
eb624dd 第一次提交html文件

klwu4@klwu4-tvmbq-28 MINGW64 /d/git_study (master)
$ git reset --soft eb624dd

在这里插入图片描述
由于暂存区的内容不变,只是版本变了,所以css和js会显示成新添加的文件

git reset --hard 版本号

klwu4@klwu4-tvmbq-28 MINGW64 /d/git_study (master)
$ git reset --hard eb624dd
HEAD is now at eb624dd 第一次提交html文件

在这里插入图片描述
直接把暂存区和工作区的内容都恢复成版本库里的样子

git reset --mixed 版本号

klwu4@klwu4-tvmbq-28 MINGW64 /d/git_study (master)
$ git reset --mixed eb624dd

在这里插入图片描述
工作区会显示未被跟踪,因为第一次提交的版本会覆盖到暂存区,暂存区里没有css和js这俩文件

七、忽略文件

.gitignore 是一个配置文件,用于告诉 Git 哪些文件或目录应该被​​忽略​​,即不被纳入版本控制。它通常位于 Git 仓库的根目录下,文件名就是 .gitignore(以点开头)。

作用

  1. 排除不必要的文件​​:比如临时文件、日志、编译生成的二进制文件等。
  2. ​​避免敏感信息泄露​​:比如密码、API 密钥、配置文件等(但更推荐用其他方式管理敏感信息)。
  3. 减少仓库体积​​:避免将无关的大文件提交到仓库中。

语法规则
​​/​​:忽略目录(如 /logs/ 忽略根目录下的 logs 目录)。
​​*​​:通配符(如 *.log 忽略所有 .log 文件)。
​​!​​:取反(如 !important.log 表示不忽略 important.log)。
​​#​​:注释。
​​​**​​​:匹配多级目录(如 ​**​/temp 忽略所有目录下的 temp 文件)。

八、分支

1) 创建分支

git branch能查看有哪些分支

下面是一个创建新分支,并在新分支上提交版本的例子,分支指针分别指在当前分支的最新位置,HEAD指针决定我们当前的位置

在这里插入图片描述
在这里插入图片描述

2) 合并分支

假设有contentlogin-bug两个分支,现在要把login-bug分支合并过来
在这里插入图片描述
首先要切回主分支master,然后使用git merge 分支名把其他分支合并回来,这时候master会指向最新的位置,即login-bug
在这里插入图片描述
合并完之后可以通过git branch -d 分支名删掉这个分支
在这里插入图片描述
最后还有一个content分支需要合并,可以发现content分支的起始点是C5,现在已经不在master所指向的位置了,这种情况如果要合并的话,就会产生一个新的提交记录(C11)
在这里插入图片描述
最终合并好的样子如下,提交记录的顺序是按照提交顺序来的,不是谁先合并谁的提交就排在前面
在这里插入图片描述

九、创建远程仓库

添加远程仓库地址
git remote add origin https://gitee.com/xxxx/git_study.git
origin 是远程仓库的别名,可以起其他的名字
下面是一些查看,移除远程仓库的指令

klwu4@klwu4-tvmbq-28 MINGW64 /d/git_study (master|MERGING)
$ git remote add origin https://gitee.com/xxxx/git_study.git

klwu4@klwu4-tvmbq-28 MINGW64 /d/git_study (master|MERGING)
$ git remote -v
origin  https://gitee.com/xxxx/git_study.git (fetch)
origin  https://gitee.com/xxxxx/git_study.git (push)

klwu4@klwu4-tvmbq-28 MINGW64 /d/git_study (master|MERGING)
$ git remote remove origin

klwu4@klwu4-tvmbq-28 MINGW64 /d/git_study (master|MERGING)
$ git remote -v

十、推送到远程仓库

git push -u origin master:master推送master分支到远程仓库origin的master分支
可以简写为git push -u origin master

klwu4@klwu4-tvmbq-28 MINGW64 /d/git_study (master|MERGING)
$ git push -u origin master

第一次会弹出登录授权,这里用的gitee,就用gitee的账号密码登录
在这里插入图片描述
授权完之后就推送上来了,这里的时间不是推送到远程仓库的时间,而是在本地commit的时候的时间
在这里插入图片描述

十一、克隆远程仓库

git clone -o 远程仓库别名 https://gitee.com/xxx/git_study.git
如果不配别名,默认就是origin
在一个文件夹下使用git clone,会产生一个和远程仓库名一样的文件夹用来存放克隆内容
使用git clone就不用git init初始化了,会自动初始化,也不用git remote add

klwu4@klwu4-tvmbq-28 MINGW64 /d
$ git clone -o repo https://gitee.com/paran-ia/git_study.git
Cloning into 'git_study'...
remote: Enumerating objects: 35, done.
remote: Counting objects: 100% (35/35), done.
remote: Compressing objects: 100% (20/20), done.
remote: Total 35 (delta 5), reused 0 (delta 0), pack-reused 0 (from 0)
Receiving objects: 100% (35/35), 4.07 KiB | 2.03 MiB/s, done.
Resolving deltas: 100% (5/5), done.

klwu4@klwu4-tvmbq-28 MINGW64 /d
$ cd git_study

klwu4@klwu4-tvmbq-28 MINGW64 /d/git_study (master)
$ git remote -v
repo    https://gitee.com/paran-ia/git_study.git (fetch)
repo    https://gitee.com/paran-ia/git_study.git (push)

十二、拉取远程仓库

如果本地仓库已经存在(之前已经用git clone克隆过),这时候想要获取远程仓库的最新代码,就要用git pull
git pull origin master
拉取origin远程仓库的master分支到本地的master分支

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值