Git学习-3 Git常用操作
1.Git用户分类
1>创建用户
作为版本控制系统的客户端,每台客户机对版本库的所有提交操作都需要注明操作者身份,所以客户机首先需要进行自我身份的注册,即创建用户。Git要求"用户名和Email"这两样信息是必不可少的。
Git有三种不同的创建方式,会产生三种不同作用域的用户,这三种创建方式的用户信息会写到三个不同的配置文件中,这三种用户的创建均需要使用git config命令,只不过使用的选项不同。
这三种创建方式的创建的用户作用域由大到小依次是:系统用户,全局用户与本地库用户,在多种用户都进行了创建的前提下,小范围用户会覆盖大范围用户,即默认会以小范围用户操作Git;
(1)系统用户:当前主机系统中所有用户均可以使用的Git用户;
(2)全局用户:当前主机系统的当前登录用户可以使用的Git用户;
(3)本地库用户:只能对当前的本地版本库进行提交的Git用户;
2.创建系统用户
可在任意目录下运行创建命令:git config --system ---->创建系统用户
git config --system user.name "china"
git config --system user.email "china@126.com"
用户注册信息会写道/mingw64/etc/gitconfig中:
Administrator@F1KSNJS1CKVCTFU MINGW64 /d/document/course/git/repositories/P2P (master)
$ cat /mingw64/etc/gitconfig ---->查看系统用户的信息
[http]
sslCAInfo = D:/application/Git/mingw64/ssl/certs/ca-bundle.crt
sslBackend = openssl
[diff "astextplain"]
textconv = astextplain
[filter "lfs"]
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
required = true
[credential]
helper = manager
[user]
name = china ---这两个就是
email = china@126.com ---系统用户的信息
Administrator@F1KSNJS1CKVCTFU MINGW64 /d/document/course/git/repositories/P2P (master)
当然也可以使用以下命令查看配置信息: git config --system --list --->查看系统用户的信息
$ git config --system --list
http.sslcainfo=D:/application/Git/mingw64/ssl/certs/ca-bundle.crt
http.sslbackend=openssl
diff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
credential.helper=manager
user.name=china
user.email=china@126.com
3.创建全局用户
可以在任意目录下运行 git config --global ---->创建全局用户
git config --global user.name "beijing"
git config --global user.email "bj@126.com"
用户注册的信息会写到当前用户目录下的.gitconfig文件中:
cd C:/Users/Administrator
cat .gitconfig
[user]
name = beijing ----这两个是全局
email = bj@126.com ----用户的信息
或者通过 git config --global --list查看信息
$ git config --global --list
user.name=beijing
user.email=bj@126.com
4.创建本地库用户
本地库用户只能在当前的本地库目录下运行该命令:git config
切换到 /d/document/course/git/repositories/P2P目录:
git config user.name "haidian"
git config user.email "hd@126.com"
用户注册信息会写到当前版本库目录下的.git目录中的config文件中
可以通过
cat c:/Users/Administrator/.gitconfig 或者git config --list
[user]
name = beijing
email = bj@126.com
5.Git基本操作
1>新建文件:
在本地版本库中新建一个hello.html文件,文件内容Hello Git World
echo "hello git world" > hello.html ---->新建文件
2>查看状态:
用于查看当前版本库的Git状态:
git status
以上为执行命令之后git反馈的信息,提示:没有任何文件被添加到提交,没有被跟踪的文件(使用git add 进行跟踪)
3>添加管理 git add 到暂存区
添加单个文件
作用将指定文件的当前快照写入版本库暂存区,即将文本将给Git进行版本管理
添加多个文件 git add 后添加多个文件,文件之间使用空格分隔
或者使用通配符git add bj-*.txt命令添加文件
4>提交操作 git commit -m ‘操作说明’
将git暂存区的文件快照永久的写入到本地仓库中
nothing commit 说明没什么可以提交了;
5>忽略文件:
一般工作区中有些文件不想交给Git管理,但由于该文件处于工作区,所以git status的时候会给出xx文件Untracked(未被跟踪),那么可以使用Git忽略这样的文件,再运行Git status命令时候不对其进行检测。
只要在工作区创建一个文件,名为.gitignore把要被忽略的文件名写入到其中,然后将.gitignore文件add添加并提交commit到本地版本库即可,可以忽略;
step:
(1)新建一个要被忽略的文件 echo "adfsdf" > info.txt
在工作区随意新建一个文件,叫做info.txt
(2)查看git状态 git status
(3)新建并提交.gitignore文件
在工作目录下次新建.gitignore文件,并将要被忽略的info.txt文件写入到其中,然后将.gitignore文件添加add并提交commit到本地版本库
echo "info.txt" > .gitignore
git status
git add .gitignore
git commit -m "忽略提交的文件"
(4)再次查看git状态 git status
已经没有info.txt 文件untracked,说明已经忽略掉了;
(5)将.gitignore文件中内容再次清空提交,发现info.txt再次报未被跟踪
echo "" > .gitignore
git add .gitignore
git commit -m "文件提交"
git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
info.txt
nothing added to commit but untracked files present (use "git add" to track)
总结:忽略文件就是将文件名称添加到.gitignore文件中,并add commit.gitignore文件可以控制想被忽略的文件不受git管理控制
6>查看区别操作: git diff
工作区:文件可编辑
暂存区:文件快照
分支区:存放多个分支
(1)比较工作区和暂存区的区别:
使用无选项git diff 命令
场景:hello.html已提交到版本库,然后工作区做了修改:
使用git diff hello.html查看工作区和暂存区的区别
当使用git add hello.html然后再git diff hello.html会发现没有内容输出:
(2)比较暂存区和本地库的区别:
使用带--cached选项的git diff命令 表示暂存区比本地版本库中的区别
工作区和暂存区一致,但是未commit:
当git commit -m "统一暂存区和版本库"之后再git diff会发现都一致
7>撤销修改:
以下内容总结为:
7.1>仅工作区修改:撤销使用 git checkout --hello.html
7.2>工作区暂存区修改,撤销使用:git reset HEAD hello.html
7.3>工作区,暂存区和本地版本库都修改了(已经commit了),撤销使用:
(1)本地版本库和暂存区和工作区都修改了: git reset --hard commitid或者HEAD^之类的 --->git reset --hard 版本号
(2)本地版本库和暂存区回退,工作区不影响:git reset --mixed commitid或者HEAD^之类的 --->恢复使用git add git commit , 如果版本跳跃过多的话使用版本号跳转
(3)仅本地版本库回退: git reset --soft commitid或者HEAD^之类的 --->git commit
对于已修改的文件内容进行撤销,根据修改内容修改的位置分为3种情况
(1)工作区中修改,未add添加到暂存区:
将文件复原即可,但是文件修改较多时候,使用git checkout -- hello.html命令
git checkout -- hello.html 将从本地版本库中获取文件覆盖掉目前的文件
git diff hello.html 再去比较或者cat hello.html就没有区别了
(2)add到暂存区,未commit到本地版本库:
git reset HEAD hello.html
git diff hello.html没有区别
但是git diff --cached hello.html是有区别的:
当执行完git reset HEAD hello.html这个命令之后,相当于是回退了一步,此时暂存区的内容回滚到本地版本库的内容,所以再
git diff --cached hello.html是一致的
但是 git diff hello.html是不一致的
(3)commit到本地版本库:
当修改内容已经提交到本地版本库中了,这种情况不能撤销修改,但是可以回退到修改之前的版本
a.查看历史版本 git log
(a.1)查看简单形式的日志:
也可通过git log命令添加选项 --pretty=oneline以单行形式简单展示日志命令
git log --pretty=oneline
(a.2)git log --pretty=oneline --abbrev-commit
前面方式下的commit id显示的是全长度的id,可以以简写的commit id方式来显示,只需要添加 addrev commit选项即可。abbrev:缩写,简写;
(a.3)翻页与退出
当git log日志命令显示的内容太多,无法在一页内显示完所有内容时,其最后一行会出现一个冒号,让输入命令,常用的命令有:
回车:显示下一行
空格:显示下一页
q:退出git log命令
(a.4)HEAD指针
Git会默认创建一个master分支,即主分支,这是Git对版本进行管理的唯一的一条时间线,在这条master时间线上有很多版本的时间节点,而HEAD指针则指向的是当前刚刚提交的版本时间节点。
它可以通过^的数量来表示当前版本之前的版本,例如HEAD^表示当前版本的前一个版本,HEAD^^表示前两个版本,但是当版本较多的时候,此时可以使用~加数字表示当前版本之前的第几个版本
(a.5)查看可也引用历史版本
git log只可以查看到HEAD指针及其之前的信息,如果版本回退到HEAD^^,那么这就是当前版本HEAD,查看其实最后的版本git log是看不到的,可使用git reflog可查看所有的历史版本信息。
b.版本回退:
git reset:
(b.1)git reset --soft:仅仅改变本地版本库的版本,不会影响工作区和暂存区
回退到指定版本,但仅仅修改分支中的HEAD位置,不会改变工作区与暂存区的文件的版本,实际上是改变了暂存区commit之前的状态,意思就是本地版本库回退到了上一个状态
回退前: 首先在版本库中的hello.html文件添加一行内容,提交,再回退到该版本
step:
hello.html追加一行记录;
git diff hello.html 有差别
git diff --cached hello.html 没有区别
git add hello.html
git diff hello.html 没有差别
git diff --cached hello.html 有区别
git commit -m "追加hello.html文件内容"
git diff hello.html 没有差别
git diff --cached hello.html 没有区别
git log --pretty=oneline查出下面的日志:
对比工作区和暂存区以及暂存区和本地版本库的差异:此时没有差异
发生回退:回退到前一个版本: git reset --soft HEAD^
回退后:
此时git diff hello.html发现没有区别
但是 git diff --cached hello.html 发现有区别的,暂存区比本地版本库多了添加的一行,本地版本库的版本回退到上一个版本了;
说明暂存区没有回退,只是本地版本库回退到了上一个版本;
git log --pretty=oneline 发现没有之前的版本了;
git reflog
恢复到之前的版本:可再次git commit 即可
(b.2)git reset --mixed (是git reset命令的默认选项)
回退到指定版本,不仅修改了分支中HEAD指针的位置,还将暂存区中数据也回退到了指定版本,但是工作区中的版本不改变
step:
hello.html中新增数据
git add hello.html
git commit -m "append six" 之后三个区内容都是保持一致的
git reset --mixed HEAD^
回退之后作对比:
工作区比暂存区内容多出SIX
暂存区和本地版本库没有区别
尚未进行add的操作
恢复回退之前的版本: git add 再git commit 但是如果是版本之前的很多版本不建议这样做,使用版本跳转的方式:git reset 版本号就可以了
(b.3)git reset --hard
回退到指定版本,该命令不仅修改了分支中HEAD指针的位置,还将工作区,暂存区和本地库中数据也回到了指定的版本
git reset --hard HEAD^
git diff 之后发现没差异
cat hello.html发现工作区内容也更改了
恢复回退前的版本
git reflog
8>删除文件
删除文件需要先查看文件的状态,若是未被git管理,可在工作区删除,若已add或commit则需要通过git命令来控制
step:
(1)新建一个文件:
add,commit之后删除
(2)查看暂存区文件列表:
git ls-files : 查看暂存区文件列表
(3)查看本地版本库文件列表
git ls-files --with-tree=HEAD
该命令实际上查看的是主分支上当前HEAD指针所指向的时间点的文件列表,若查看上面时间点的文件列表,可以将HEAD替换成HEAD^,当前也可以使用HEAD~N
(4)仅删除暂存区中的指定文件 git rm --cached hello.html
查看暂存区和本地库:暂存区中删除了,本地库中仍然存在
此时通过git commit 命令可以将本地库中的文件也删除;
(5)恢复被删除文件命令 git reset HEAD hello.html,然后再git commit也恢复本地库中的文件了
(6)完全删除文件:本地版本库,暂存区,工作区都删除:
git rm hello.html
查看工作区:ls
查看暂存区:git ls-files
查看本地库:git ls-files --with-tree=HEAD 发现本地库仍然存在
若要本地库也删除,直接 git commit -m '删除文件'即可
9>恢复被删除的文件
git checkout --
使用版本回退命令,将版本回退到删除之前的版本即可
(1)查看要回复的commitid:
git reflog
(2)恢复:git reset --hard commitid
(3)查看各个区域文件的情况
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理