Linux下Git简单使用
前言
Git是一个分布式版本控制系统,用于高效的处理或大或小的项目,之前一直使用IDEA整合的Git,对Git的各种命令和原理不是很了解,所以来学习一下。
Git的分布式体现在每台电脑上的Git都包含完整的版本库信息(如历史提交记录),有一个集中式的服务器如GitHub只是为了方便我们交换代码,实际上任意两个Git之间都是可以相互通信的。
安装
Linux下可以使用yum直接安装
复制yum install git
配置属性
git config --system user.name 'szz'
可以配置系统属性,当前操作系统所有用户有效
git config --global user.name 'szz'
可以配置全局属性,当前操作系统当前用户有效
git config --local user.email 'szz@163.com'
可以配置本地属性,当前操作系统当前用户当前仓库有效
commit文件前需要先配置user.name和user.email两个属性
各种概念
一个受Git管理的文件有3种状态
- 工作区,文件创建之后就在工作区,使用
git add test1.txt
命令将test1.txt文件添加到暂存区 - 暂存区,使用
git rm --cached test1.txt
命令将test1.txt文件从暂存区清除,不影响工作区,
使用git checkout -- test1.txt
命令将暂存区的test1.txt文件替换工作区的test1.txt文件,很危险,会清除工作区那些未添加的改动。
使用git reset HEAD test1.txt
命令将暂存区test1.txt文件回退到上一次commit提交之后的版本(清除暂存区),不影响工作区。
使用git commit -m '测试'
命令将暂存区文件提交到版本库。 - 版本库,使用
git log
查看commit记录,
使用git reset --soft HEAD^
回退到上次commit的版本
常用命令
git init
初始化一个git仓库,会创建一个.git
目录,包含该仓库的所有元数据,如暂存区数据等
git status
查看当前仓库(当前分支)的状态,如有哪些文件处于暂存区需要commit。
git log
查看提交记录(当前分支)
git reflog
查看操作记录(当前分支)
git blame a.txt
查看a.txt的修改记录
git reset --mixed a.txt
重置暂存区a.txt文件和最后一次commit保持一致(默认--mixed)。
git reset --soft HEAD^
重置版本库所有文件到最后一次commit(回退版本,不能回退指定文件,不影响暂存区和工作区文件,可以废弃之前有错误commit日志的commit)。
git reset --hard HEAD^
重置版本库所有文件到最后一次commit(回退版本,不能回退指定文件,工作区文件也回退,清除暂存区)。
git reset --hard 04ae
重置版本库所有文件到指定commit。
git rm a.txt
删除工作区和暂存区的a.txt文件(前提是a.txt已经存在版本库中),如果暂存区之前已经有修改过的a.txt,可以使用git rm --cached a.txt
先删除暂存区的a.txt,或者使用
git rm -f a.txt
强制删除。
git rm
和rm
的区别,前一种不仅会删除,且会将这次删除操作添加到暂存区。
如果使用git rm a.txt
命令之后,又想不删了,可以先使用git reset HEAD a.txt
将这次删除操作移除暂存区,再使用git checkout -- a.txt
丢弃工作区的删除操作,就可以将a.txt恢复到工作区了。
git diff a.txt
比较暂存区和工作区a.txt文件的区别
git diff HEAD a.txt
比较最新commit和工作区a.txt文件的区别
git diff --cached a.txt
比较最新commit和暂存区a.txt文件的区别
git diff master dev
比较master分支和dev分支的区别
git cherry-pick [commitid]
将指定的commit应用到当前分支(部分合并分支)
配置.gitignore文件
我们可以使用.gitignore文件来忽略不想提交的文件,如java项目中编译的class和IDE的配置信息等。
复制*.txt # 所有类型为txt的文件
!a.txt # 不忽略a.txt
b/ # b目录下所有文件
b/**/c.txt # b目录下所有层级下的c.txt文件
分支管理
使用分支可以让我们每个人独立于主线之外开发,互不影响。
git branch
查看所有分支
git branch test1
创建test1分支
git branch -m test1 test2
修改test1分支的名称为test2
git checkout test1
切换到test1分支
git checkout -b test1
创建test1分支并切换到test1分支
git branch -d test1
删除test1分支,如果test1分支有提交没有被合并,不能删除,可以强制删除或进行合并
git branch -D test1
删除test1分支,强制删除
git merge test1
将test1分支合并到当前分支上
分支切换及合并的原理
git会将所有的commit串成一条线,每个commit都有一个或多个(合并情况下)parent指针(指向上次的commit),HEAD指针指向当前分支(可以通过.git目录下HEAD文件查看),master指针指向master分支最新的commit。
我们可以使用git log
查看commit记录,使用git show --pretty=raw [commit id]
查看一次commit的详细信息,包含它的parent指针。
当我们创建了一个新的分支dev并且切换过去后,HEAD就指向了dev分支,dev指针也指向了最新的一次commit。

我们在dev分支上做了新的commit后,dev指针向前移动一个,master指针不变。

当我们想将dev分支合并到master分支上时,要先切换到master分支,HEAD指针就指向了master分支,合并之后master指针直接指向当前dev指针指向的commit。

上面是没出现冲突的情况,如果出现了冲突,dev分支修改了a文件,master分支也修改了a文件,且都修改了同一行,将dev合并到master时就会冲突

这种情况需要我们手动修改a文件解决冲突,然后再次commit,master指针就指向了新的commit(此commit有两个parent指针)。

merge和rebase的区别
假设当前在mywork分支,执行git merge origin
可以将origin分支内容合并到当前分支,并生成一个新的commit

执行git rebase origin
,相当于将mywork的两次commit以补丁的形式合并到origin的最后一次commit上,会将原来的commit删除(C5,C6),创建新的commit(修改了历史commit,不建议使用)

标签管理
标签可以看做当前仓库当前分支最新commit时的一个快照
git tag -l
查询所有标签
git tag -l 'v1.0'
查询名称为v1.0的标签
git tag -a v1.0 -m '版本1'
创建名称为v1.0的标签,注释为版本1
git tag -d v1.0
删除名称为v1.0的标签
远程仓库
git clone [url]
从远程git服务器克隆一个仓库到本地,后续可以直接push
git remote add origin [url]
添加一个远程仓库的关联,origin就是远程仓库的别名
git remote -v
查看当前仓库关联的远程仓库
git remote show origin
查看关联的远程仓库的信息
git push origin master
将本地的master分支推送到远程仓库的master分支
git pull origin master
将远程仓库的master分支拉取到本地的当前分支并合并,相当于git fetch
和git merge origin/master
两个命令的简写。
在项目中,我们一般多人开发,张三修改了a.txt,commit之后,push到远程,李四也修改了本地的a.txt,push时会失败(因为和远程的有冲突),需要先pull,处理完冲突,再次push。
git branch -a
查看所有分支,包含远程分支
git branch -r
查看所有远程分支
git push origin --delete test2
删除远程的test2分支
git push origin v1.0
将本地的标签v1.0推送到远程
git push origin --delete v1.0
删除远程的v1.0标签
git checkout -b dev origin/dev
根据远程分支dev创建本地分支dev
模块管理
关于submodule,可以查看7.11 Git 工具 - 子模块。
关于subtree,可以查看用 Git Subtree 在多个 Git 项目间双向同步子项目,附简明使用手册。
总结
理解了各种命令,也就理解了图形化工具各种功能的原理,如IDEA对git整合的各种操作。
参考
git-简明指南
Git教程-菜鸟教程
Git官网
git分支开发的原理
git rebase原理和使用
【转载】剖析Git的实现机制
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具