目录
- 1.创建本地仓库
- 2.配置 Git
- 3.添加文件
- 1.添加文件
- 2.提交文件
- 3.其他 && 说明
- 4.删除文件
- 5.跟踪修改文件
- 6.版本回退
- 7.撤销修改
- 0.前言
- 1.未add
- 2.已add,未commit
- 3.已add,已commit
1.创建本地仓库
- 创建⼀个Git本地仓库:
git init
- 运行该命令后,会在当前目录下多出一个
.git
的隐藏目录 .git
目录是Git用来跟踪管理仓库的,不要手动修改这个目录里面的文件- 如果改乱了,该Git仓库就被破坏了
2.配置 Git
- 安装Git后⾸先要做的事情是设置⽤⼾名称和Email地址
git config [--global] user.name "Your Name"
git config [--global] user.email "email@example.com"
--global
是一个可选项,表⽰这台机器上所有的Git仓库都会使⽤这个配置
- 查看配置:
git config -l
- 删除对应的配置:
git config [--global] --unset user.name
git config [--global] --unset user.email
3.添加文件
1.添加文件
- 添加⼀个或多个⽂件到暂存区:
git add [file1] [file2] ...
- 添加某个目录下的所有⽂件改动到暂存区:
git add [dir]
- 添加当前⽬录下的所有⽂件改动到暂存区:
git add .
2.提交文件
- 提交暂存区全部内容到本地仓库中:
git commit -m "message"
- 提交暂存区的指定⽂件到仓库区:
git commit [file1] [file2] ... -m "message"
- 注意:
git commit
后⾯的-m
选项,要跟上描述本次提交的message
,且不能省略- 该描述用来记录提交细节,是给人看的,所以要好好描述
3.其他 && 说明
- 查看历史提交记录:
git log
- 如果觉得信息太多,可以加上
--pretty=oneline
参数
- 如果觉得信息太多,可以加上
- 类似
7a535a4f3e6dba8a8dbcea9d7e3ee3c395aeabf3
,是每次提交的commit id
(版本号)- 不是单纯的数字,而是由
SHA1
计算出来的十六进制数
- 不是单纯的数字,而是由
4.删除文件
- 方法一:
- 先在工作区中删除该文件:
rm file
- 添加工作区中该文件的修改:
git add file
- 提交修改:
git commit
- 先在工作区中删除该文件:
- 方法二:
- 直接删除并添加修改:
git rm file
- 相当于将
rm file
和git add file
合并为了一步
- 相当于将
- 提交修改:
git commit
- 直接删除并添加修改:
5.跟踪修改文件
- Git跟踪并管理的是修改,⽽⾮⽂件
- 查看当前仓库的状态:
git status
$ git status On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: 233.txt no changes added to commit (use "git add" and/or "git commit -a")
- 显⽰暂存区和⼯作区⽂件的差异:
git diff [file]
$ git diff diff --git a/233.txt b/233.txt index 99a6aad..80c8ca9 100644 --- a/233.txt +++ b/233.txt @@ -1 +1,2 @@ SnowK +DieSnowK
- 查看版本库和⼯作区⽂件的区别:
git diff HEAD -- [file]
6.版本回退
- 版本回退:
git reset
,本质是将版本库中的内容进⾏回退,⼯作区或暂存区是否回退由命令参数决定 - 语法格式:
git reset [--soft | --mixed | --hard] [HEAD]
--mixed
:将暂存区和版本库的内容回退到指定版本,工作区的内容不变- 默认选项,使用时可以不带此参数
--soft
:将版本库的内容回退到指定版本,工作区和暂存区的内容不变--hard
:将工作区、暂存区、版本库的内容都回退到指定版本- 慎用,特别是当前工作区还有未提交的代码时
- 因为工作区回滚,未提交的代码就再也找不回来了
[HEAD]
说明:可直接写成commit id/SHA1
,表⽰指定退回的版本- 也可以写成如下形式
HEAD
表⽰当前版本HEAD^
上⼀个版本HEAD^^
上上⼀个版本- 以此类推…
- 还可以使用
~数字
表示- HEAD~0表⽰当前版本
- HEAD~1上⼀个版本
- HEAD~2上上⼀个版本
- 也可以写成如下形式
- 如果回退到一个版本后悔了,想再倒回去,该怎么办?
- 可以继续使用
git reset
命令,直接使用之前拿到的git log
中的commit id
即可
- 可以继续使用
- 如果连
git log
中的commit id
也找不到了,该怎么办?- 使用
git reflog
补救,该命令用来记录本地的每一次命令 git reflog
拿到的是一个很简短的哈希值,但是凭借哈希值,也可以回退到特定版本- 该简短的哈希值是
commit id
的部分 - 即:可以使用部分
commit id
来表示目标版本
- 该简短的哈希值是
$ git reflog 1320449 (HEAD -> master) HEAD@{0}: reset: moving to 13204498006394d6067fbc8b6046885c6e5e9649 7a535a4 HEAD@{1}: reset: moving to HEAD^^ 1320449 (HEAD -> master) HEAD@{2}: commit: 233.txt add DieSnowK d74fd33 HEAD@{3}: commit: 666.txt 7a535a4 HEAD@{4}: commit (initial): First Commit $ git reset --hard 7a535a4 HEAD is now at 7a535a4 First Commit $ git log commit 7a535a4f3e6dba8a8dbcea9d7e3ee3c395aeabf3 (HEAD -> master) Author: DieSnowK <1752351098@qq.com> Date: Tue Jul 23 14:30:39 2024 +0800 First Commit
- 使用
- 但是如果由于长时间开发,导致
commit id
早就找不到了,此时再想回退倒该版本,貌似就不可能了:P - 说明:Git的版本回退速度⾮常快的原因
-
Git在内部有个指向当前分⽀(此处是
master
)的HEAD
指针refs/heads/master
⽂件⾥保存当前master
分⽀的最新commit id
-
在回退版本的时候,Git仅仅是给
refs/heads/master
中存储了一个特定的commit id
-
7.撤销修改
0.前言
- 撤销修改一般会遇到三种情况
- ⼯作区的代码,还没有
add
:只有工作区有当前代码 - 已经
add
,但还未commit
:只有工作区和暂存区有当前代码 - 已经
add
,并且commit
:工作区、暂存区、版本库都有当前代码
- ⼯作区的代码,还没有
- 首先要明确:撤销的目的,其实是为了不影响远端仓库的代码
1.未add
- 手动撤销:大眼瞪小眼,一个个盯着对比,然后删除
- 非常容易出错,及其不推荐
- 让工作区回到该版本的最初状态:
git checkout -- [filename]
- 注意:
--
不能丢,丢了就是其他含义了
- 注意:
2.已add,未commit
- 此时可以先
git reset --mixed [HEAD]
,将暂存区的内容回退到指定的版本- 此处,可以将暂存区回退到该版本最初始的状态
- 然后就与情况一相同了,相当于是未
add
的情况- 此时执行
git checkout -- [filename]
即可
- 此时执行
3.已add,已commit
- 前置条件:
commit
后没有push
到远端仓库 - 直接回退到上一个版本即可:
git reset --hard HEAD^