史上最全 Git 图文教程,没有之一
共 15108字,需浏览 31分钟
·
2024-07-29 07:43
阅读本文大概需要 4 分钟。
来自:juejin.cn/post/7245176801491894333
Git安装
安装
https://git-scm.com/
Windows 系统直接下载 .exe
文件即可,macOS 系统使用Homebrew
命令行安装,终端输入git --version
确认安装
Git Base Here
选项,有就成功了
介绍
-
工作区: 处理工作的区域 -
暂存区: 临时存放的区域 -
本地git仓库: 最终的存放区域
-
工作区: 在你电脑里看到的目录 -
暂存区: 在.git文件夹内的index中 (二进制记录) -
版本库: 指的整个.git文件夹 (也认为是本地仓库)
Git使用
Git配置
-
git config: 固定命令,设置git相关配置 -
--global: 全局配置;一次配置,整机在使用git时都生效
git config --global user.name 你的用户名
git config --global user.email 你的邮箱地址
git config --list
#如果信息太多,可以输入 q 退出
文件右侧标记
-
M:已修改(Modified) - 文件已被修改但还没有被添加到暂存区 -
A:已添加(Added) - 文件已经被添加到暂存区,但还没有被提交 -
D:已删除(Deleted) - 文件已经被删除,并且已经被标记为删除,但还没有提交 -
R:已重命名(Renamed) - 文件已经被重命名,这也算作是一种修改,需要被添加到暂存区 -
C:已复制(Copied) - 文件已经被复制,这也算作是一种修改,需要被添加到暂存区 -
U:已更新但未融合(Updated but Unmerged) - 这表示一个文件已经被更新了,但在合并时发生了冲突,需要手动解决冲突后再标记为已解决
Git基础命令
.git
文件夹,没有被 git 管理
.git
文件夹,初始化成功则可让 git 开始准备管理
# 初始化 git 仓库, 产物: .git 文件夹 (所在文件夹"内"被管理)
git init
git init
命令用于初始化空的git版本库
.git
文件夹
-
对于 Windows 系统,在查看里面勾选隐藏的项目选项 -
对于 macOS 系统,使用快捷键 Command + Shift + .
切换隐藏文件显示
工作区开发
--->将修改后的文件添加到暂存区
--->将暂存区的文件记录到版本库
# 将 index.html 添加到暂存区
git add index.html
# 将css目录下一切添加到暂存区
git add css
# .的意思是当前目录下所有变化都暂存
git add .
git commit -m '提交的内容说明'
git log
--oneline:在一行显示简略信息
git log --oneline
git status
git add .
git commit -m '新建登录页面_和样式'
git reset --hard 版本号
git log --oneline
git reset --hard 477321b
git reflog
命令,可以查看 git 所有的操作记录,包括你的reset记录
git reflog
-
git bash(终端)清屏:clear -
git bash(终端)另起一页:Ctrl + L
.gitignore
的忽略文件并写入忽略规则(此处的文件名就是 .gitignore
,不是后缀)
# .gitignore内容:
password.txt
其余用法:
# 忽略文件夹
css
# 忽略文件夹下的某个文件
css/index.js
# 忽略文件夹下某类文件
css/*.js
password.txt
,查看 git 追踪到了哪些变化
git status
.gitignore
,符合规则的都被忽略掉了
.gitignore
文件在项目中可以根据脚手架自动生成,无需自己编写,当然如果你非要写,以下是Vue官方自动生成的.gitignore
文件代码,可供复制使用
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
Git分支
git reset --hard a3bcab2
,HEAD指针会移动,而且HEAD移动后,会影响工作区里的代码
-
创建分支命令如下
# 创建分支
git branch 分支名
-
查看当前版本库所有分支命令如下
# 查看当前版本库所有分支,绿色带*代表现在所处的分支
git branch
-
手动切换到分支上
# 切换分支命令
git checkout 分支名
reg.html
文件,并随便写点内容。随后暂存并提交一次,这次提交的记录会出现在这里,如图
# 切换分支
git checkout master
# 把目标分支名下的所有记录, 合并到当前分支下
git merge 目标分支名
git merge reg
,执行后效果如图:
git branch -d 分支名
error: The branch 'branch_name' is not fully merged. If you are sure you want to delete it, run 'git branch -D branch_name'.
git branch -D <branch_name>
命令来强制删除该分支。但请注意,这样会丢失掉分支上的未合并修改
-
在 master 分支下,修改 login.html
的某行代码,并完成一次暂存提交
-
切换到 reg 分支下,也修改 login.html
的对应行代码,并完成一次暂存提交
-
再切换回到 master 分支下,用合并命令,把 reg 分支下代码和变化合并过来,不出意外就会出现冲突了
此时我们要进行抉择: 采用当前更改
、采用传入更改
、全部保留
此时结束冲突状态,变回正常状态
Git分支流程图详解(拓展)
git branch reg
就会在当前的提交记录上创建一个新的指针,名称为reg
git checkout reg
切换的是HEAD指针指向 (切换分支)
git add .
添加到暂存区,git commit -m
产生了一次提交记录
-
git checkout B
,切换到目标分支 B -
git merge A
,把 A 分支记录合并到所在 B 分支下
git checkout master
git merge reg
index.html
文件,并暂存提交,产生了记录
index.html
文件(同一个文件),暂存提交,产生了记录
Git远程仓库
gitee.com
网站以后,添加主邮箱为自己本地 git 仓库设置的邮箱,注意一定要相同,否则无法正确提交 如果忘记了本地设置的邮箱地址:
-
可以打开控制台输入 git config --list
重新查看邮箱地址 -
当然也可以使用 git config --global user.email
你的邮箱地址重新覆盖原来的邮箱地址
.git
结尾的地址
-
HTTPS协议: 需要输入用户名和密码 https://gitee.com/(userName)/(repositoryName).gitssh
-
SSH协议: 需要配置密钥,可免密码登录 git@gitee.com:userName/repositoryName.git
-
作用: 实现本地仓库和 gitee 平台之间免登录的加密数据传输 -
组成: id_rsa (私钥文件,存放于客户端的电脑中即可)、id_rsa.pub (公钥文件,需要配置到 gitee 平台中)
私钥加密的信息,只能通过公钥解密。公钥加密的信息,只能通过私钥解密。安全性高!
-
先在本机生成一个密钥 (以后也可以重新生成、重新配置),打开一个终端,输入以下命令:
ssh-keygen -t rsa -C "你注册账号的邮箱"
-
连续敲击 3 次回车,即可在
C:\Users\用户名文件夹.ssh目录
中生成id_rsa
和id_rsa.pub
两个文件 -
使用 VSCode 打开
id_rsa.pub
文件,复制里面的文本内容 -
粘贴配置到 码云 -> 设置 -> ssh 公钥 中即可
-
如果为 mac ,可进入以下教程查看:mac获取公钥
# 给远程仓库设置一个别名
git remote add 仓库别名 仓库地址
git remote add origin git@gitee.com:(username)/repository.git
# 删除 origin 这个别名
git remote remove origin
# 使用 -u 记录 push 到远端分支的默认值,将来直接 git push 即可
git push -u 仓库别名 分支名
-
随便新建一个项目文件夹,初始化 git,随后在项目文件中随便填充点内容,这里我新增一个 .gitignore
文件,随后暂存提交到本地 git 库
-
输入以下命令:
# 注意:这里的existing_git_repo是你的项目根路径
# 如果你是在项目文件夹开启的终端,忽略此行
cd existing_git_repo
# 添加远程仓库关联,仓库别名origin,可以随意更改,后接ssh地址
# 此处的ssh是自动生成的,可以去gitee空仓库的代码页直接复制即可
git remote add origin git@gitee.com:li-houyi/test-factory.git
# 第一次推送到远程时需要指定具体的分支,因为远程仓库并没有这个分支
# 使用 -u 记录 push 到远端分支的默认值,将来直接 git push 即可
git push -u origin "master"
-
出现此页面即为成功:
注意:推送的本地仓库一定要非空并且本地暂存提交过,不然会报错!这点也很好理解,你传个空的项目到一个空仓库,这可不得给你报错吗
-
推送成功后重新进入 gitee 仓库页面查看是否正确推送
git clone
命令
git clone [options] <repository-url> [directory]
# directory(可选)克隆后的本地仓库所处的目录名称(默认创建与远程仓库名字相同的目录)
-
-b <branch>
或--branch <branch>
: 指定要克隆的远程仓库的特定分支,它不会影响克隆操作所获取的分支数量,而只是指定了默认要检出的分支(不指定则默认克隆远程仓库的主分支) -
--depth <depth>
: 指定克隆的深度,即只克隆指定数量的提交历史 -
--single-branch: 仅克隆指定分支以及该分支上的历史记录,不下载其他分支 -
--recurse-submodules: 初始化并克隆子模块的内容 -
-n 或 --no-checkout: 克隆后不立即检出任何分支,保留 HEAD 指向原始仓库的默认分支 -
-o <name>
或--origin <name>
: 自定义远程仓库的别名。 -
-u <remote> <branch>
或--set-upstream-to=<remote>/<branch>
: 设置追踪关系,使得本地分支自动与指定的远程分支关联
git clone
默认拉取 master 分支),不过实际开发中,并非只有一个分支,于是我们还需执行以下步骤:
-
在本地建分支,分支名与远程分支名相同,查看远程分支名使用 git branch -r
git checkout -b 对应远程分支名
-
拉取远程分支 (不要在 master 分支直接拉取对应分支的代码,切换到新建的分支)
# 每次拉取都需要指定远程仓库名和分支名
git pull 远程仓库名 分支名
-
以上两行命令可以合并写做一行(创建并拉取远程分支代码)
git checkout -b 分支名 origin/分支名
-
拓展: 设置 git pull
默认拉取的分支(设置本地分支与远程分支相关联)
git branch --set-upstream-to=origin/远程分支名 本地分支名
Git常用命令总览
<>
为必填项,[]
为可选项
推荐阅读:
ThreadLocal 不香了?ScopedValue才是王道?
程序员在线工具站:cxytools.com 推荐一个我自己写的工具站:http://cxytools.com,专为程序员设计,包括时间日期、JSON处理、SQL格式化、随机字符串生成、UUID生成、随机数生成、文本Hash...等功能,提升开发效率。
⬇戳阅读原文直达! 朕已阅