🌟想了解其它网安工具?看看这个:[网安工具] 网络安全工具管理 —— 工具仓库 · 管理手册
https://github.com/git/githttps://github.com/git/git
0x01:Git 工具简介
Git 是一个开源的分布式版本控制系统,由 Linus Torvalds 于 2005 年创建,主要用于软件开发过程中对源代码进行版本控制和管理。
Git 允许开发者在不同的分支上进行开发,每个分支都可以独立地进行修改、添加和删除等操作,而不会影响到其他分支。当开发完成之后,开发者可以通过合并分支将各个分支上的改动整合在一起,从而实现代码的更新和迭代。Git 还支持多人协作开发,每个开发者都可以在本地克隆一份代码仓库,进行独立的开发工作,然后将自己的改动推送到远程仓库,其他开发者可以拉取这些改动并进行合并,大大提高了开发效率。
0x02:Git 相关教程
-
Git 版本控制 —— 场景引入 - 🚩什么是版本控制?
-
Git 版本控制 —— 工具的诞生 - 🚩 Git 的诞生背景(一个小故事)
-
Git 版本控制 —— 集中式 Vs 分布式 - 🚩 什么是分布式?分布式的优点在哪里?
-
Git 版本控制 —— 工具的安装 & 配置 - 🚩 不同系统命令行版本的 Git 安装 & 基础配置
-
Git 版本控制 —— 创建本地版本库 & 添加文件 - 🚩 让文件被 Git 管理 !!
-
Git 版本控制 —— 工作区 & 暂存区 & 版本库 - 🚩 Git 文件管理逻辑 !!
-
Git 版本控制 —— 时间法则 — 版本对比 - ⌚ 时间法则入门 - 对比历史版本差异 !
-
Git 版本控制 —— 时间法则 — 版本切换 - ⌚ 时间法则进阶 - 时间回溯 & 穿越未来!
-
Git 版本控制 —— 时间法则 — 管理修改 - ⌚ 时间法则掌控 - 后悔药了解一下?
-
Git 版本控制 —— 空间法则 — 分支管理 - 🚀 空间法则入门 - 分支的创建 & 合并
-
Git 版本控制 —— 空间法则 — 冲突问题 - 🚀 空间法则进阶 - 修改冲突了咋办?
-
Git 版本控制 —— 空间法则 — 分支管理策略 - 🚀 规则系 - 如何创建与管理分支?
-
Git 版本控制 —— 版本迭代 — 标签管理
-
Git 版本控制 —— 远程仓库 — GitHub
-
Git 版本控制 —— 远程仓库 — GitCode
-
Git 版本控制 —— 图形界面 — SourceTree
0x03:Git 速查手册
0x0301:Git 环境初始化相关命令
### 配置我是谁, --global 代表全局配置
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
### 查看配置信息
git config --list
0x0302:Git 创建版本仓库 & 添加文件到版本仓库
### 初始化一个新的 Git 仓库在当前目录
git init
### 通过 git add,将文件添加到暂存区,准备提交到版本库
git add file1.txt file2.txt # 可以一次性提交多个
git add . # 将所有更改添加到暂存区
### 通过 git commit 将暂存区的修改提交到版本库,并添加一条描述性的提交消息。
git commit -m "Write A Test FIle."
0x0303:Git 文件管理 — 工作区 & 暂存区 & 版本库
### 查看当前工作目录、暂存区和版本库中文件的状态。有无新增、修改、删除
git status
### 丢弃工作目录中的更改
git restore <file>
### 撤销暂存区修改
git restore --staged readme.txt
# 当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,使用下面的命令
git checkout -- <file_name> # 撤销修改,让文件回到最近一次版本库或暂存区时的状态
# 当你改乱了工作区某个文件的内容,还添加到了暂存区,需要使用下面两个命令
git reset HEAD <file> # 撤销暂存区修改
git checkout -- <file_name> # 撤销修改
# 当确定从版本库中删除某个文件
git rm <file_name>
0x0304:Git 时间法则 — 查看回溯节点
### 查看历史版本 => 确定回溯日期
git log --all # 显示所有提交历史记录,包括所有分支
git log # 显示当前分支的所有提交记录。
git log --pretty=oneline # 精简输出
git log --graph --pretty=oneline --abbrev-commit # 查看历史提交记录,图形化更好看
git log --stat # 查看每个 commit 提交了哪些文件
git log -- app.js # 查看某个文件的修改历史(例如 app.js)
git log -- src/ # 查看某个目录的修改历史(例如 src/)
### 查看指定提交的详细信息(自动对比本次相较于上次提交的差异)
git show <commit_id> # 查看指定提交的详细信息。
### 查看本地仓库中 HEAD 指针的移动历史,可用于版本回溯,与穿越未来
git reflog
0x0305:Git 时间法则 — 对比回溯节点
# 查看工作区与暂存区的差异
git diff
# 显示工作区与最新提交的全部差异
git diff HEAD
# 某一个历史版本与工作区某一个文件的对比,<commit_id> 可以换成 HEAD
git diff <commit_id> -- GitStudyLog.txt
# 查看暂存区与最新提交的差异(已暂存的修改)
git diff --staged
# commit_id2 相较于 commit_id1 的差异
git diff <commit_id1> <commit_id2>
# 列出工作区与对应提交版本间存在差异的文件路径
git diff HEAD --name-only
0x0306:Git 时间法则 — 操纵时间流向
# 回溯到对应版本号,可以进行版本回溯 & 时间穿越,<commit_id> 可替换为 HEAD
git reset --hard <commid_id>
## 版本号相关规则
# <commit_id> => 可用于穿越未来
# HEAD^ => 上个版本
# HEAD^^ => 上上个版本
# HEAD~1 => 上一个版本
## 回退的节点相关参数
# --hard => 回退到上个版本已提交状态
# --mixed => 回退到上个版本已添加但未提交的状态
# --soft => 回退到上个版本未提交状态
0x0307:Git 空间法则 — 分支管理
### 创建 & 切换分支
git switch -c dev # 创建并切换到 dev 分支
git branch dev # 创建 dev 分支
git switch dev # 切换到 dev 分支
### 查看当前所处的分支
git branch # 查看当前分支, 当前分支前面会标一个 * 号
git branch -v # 列出仓库中的所有分支,并显示每个分支的最后一次提交信息
### 分支的合并
git merge dev # 将 dev 分支合并到当前分支上, 把 master 指向 dev 的当前提交
git merge --no-ff -m "merge with no-ff" dev # 以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而`fast forward`合并就看不出来曾经做过合并
### 冲突的解决
git status # 可以查看存在冲突的文件
手动解决冲突后照常 add + commit 即可,完成后就可以删除对应分支了。
### 分支的删除
git branch -d dev # 删除 dev 分支, -D 强制删除分支(强制删除未被合并的分支)
0x0308:Git 远程仓库操作
1. 创建 SSH Key
ssh-keygen -t rsa -C "youremail@example.com" # 生成公钥后放在远程仓库中
2. 登录 GitHub,打开 Account settings,SSH Key 页面,点击 Add SSH Key 将公钥黏贴上去
3. 在 GitHub 上创建一个空的仓库
4. 将远程仓库与本地仓库做关联,命名为 GitHub
git remote add GitHub git@github.com:Blue-Seventeen/gitTest.git
git branch -M main
git push -u GitHub main # -u 参数会将本地的 master 分支与远程 master 分支关联
5. 做了关联后,后续的提交命令
git push GitHub <分支名称>
git push GitHub main # 将本地内容提交到 GitHub 这个仓库中的 main 分支去。
6. 删除远程仓库(将本地和远程仓库解绑,远程仓库本身并没有真正删除)
git remote -v # 查看远程仓库信息, fetch 抓取权限,push 推送权限
git remote rm GitHub # 与远程仓库解绑
7. 克隆远程仓库
git clone [repository] # 克隆远程仓库到本地。
0x0309:Git 分支管理相关命令
### 分支管理策略
- master/main => 用来发布新版本
- dev => 在 dev 分支上干湖哦,要发布时将 dev 分支合并进 master 分支,再发布。
- <名称> => 在自己的 dev 上干湖哦,时不时的往 dev 分支上合并就完了
- bug 分支 => 创建一个临时的 bug 分支(issue-101)来修复,修复完成后再合并进 dev 中,再删除 Bug 分支
git stash => 将工作现场临时存储起来
git stash list => 查看之前保存的工作现场
git stash apply => 恢复现场,但是 stash 内容并不删除,需要用 git stash drop 删除
git stash apply stash@{0} => 恢复指定的现场内容
git stash pop => 恢复的同时把 stash 内容也删除了
git cherry-pick <commit> => 将 bug 提交的修改 “复制” 到当前分支,避免重复劳动
- feature 分支 => 每添加一个新功能,都新建一个 feature 分支,在上面开发,完成后再合并,最后再删除(git branch -D feature 强行删除)
### 多人协作
- master 主分支 => 时刻与远程同步
- dev 开发分支 => 时刻同步
- 其它分支,自己藏着玩
1. git clone <repo link> # 克隆项目,默认情况下只能看到 master 分支
2. git checkout -b dev origin/dev # 建立远程的 origin 的 dev 分支到本地
3. 在 dev 分支上继续修改
4. git push origin dev # 向 origin 远程仓库推送 dev 分支
如果冲突了:
git pull -> 从远程仓库拉取最新的代码到本地,并与本地代码合并。
git pull 前需要先指定本地分支与远程分支的连接
git branch --set-upstream-to=origin/dev dev
- .java -> .class -> war
- .git 有用的内容
- .git/logs/HEAD -> 存储了 git 的 log 信息,可以找到历史的 commit 项
- .git/index -> 缓存 git add 的文件,暂存区
- .git/refs/stash -> git stash -> 把代码存入缓存区
- .git/refs/heads/master -> 记录了 master 的 commit 的 hash
- .git/objects/pack/.pack
0x04:Git 参考资料
使用Gitee - Git教程 - 廖雪峰的官方网站廖雪峰的官方网站 (liaoxuefeng.com) 研究互联网产品和技术,提供原创中文精品教程https://liaoxuefeng.com/books/git/gitee/index.html
【最全面】SourceTree使用教程详解(连接远程仓库,克隆,拉取,提交,推送,新建/切换/合并分支,冲突解决,提交PR) - 追逐时光者 - 博客园前言: 俗话说的好工欲善其事必先利其器,Git分布式版本控制系统是我们日常开发中不可或缺的。目前市面上比较流行的Git可视化管理工具有SourceTree、Github Desktop、TortoiseGit,综合网上的一些文章分析和自己的日常开发实践心得个人比较推荐开发者使用SourceTree,https://www.cnblogs.com/Can-daydayup/p/13128633.html