文章目录
1. Git
2. 基础/查阅
2.1 基础/查阅 - git
## 初始化
git init
## 删除git版本控制
rm -rf .git
## 当前分支信息提交状态
git status
## 查看历史提交记录
git log
## 文本新建
touch .gitignore
2.2 仓库 - remote
远程仓库 remote
## 添加一个新的远程仓库。指定一个远程仓库的名称和 URL 将其添加到当前仓库中。
git remote add <remote_name> <remote_url>
--> git remote add origin (remote_url)
## 查看远程分支信息
git remote -v
2.3 清理 - rm/clean
## 删除暂存区/缓存区Staging area内容
git rm --cached <文件路径> // 删除指定文件
git rm --cached <文件路径> -r // 删除此路径下所有文件
## 删除所有未提交本地仓库的缓存
git clean -f
2.4 版本回退 - reset
## 回退上 x 个版本(并保留本次修改的内容到工作区)
git reset HEAD~x
## --hard :版本回退会清理所有未提交/未跟踪的内容 & 清除该版本后的所有提交
## 回退上 x 个版本
git reset --hard HEAD ~x
## 回退指定版本
git reset --hard xxxxxxx(版本号/版本号前几位)
## 回退指定文件到指定版本
git reset --hard xxx(版本号或版本号前几位) filename
2.5 修改commit注释 - amend / rebase
xxxxxxxx
3. 分支
3.1 分支基础 - branch
## 列出本地分支(需要在commit后真正创建)
git branch
git branch -v
## 查看远程分支
git branch -r
## 查看本地与远程分支之间的映射关系
git branch -vv
## 手动创建分支(新建的分支基于当前所在分支进行复制)
git branch (branchname)
## 重命名当前分支名
git branch -M (branchname)
## 删除本地分支,强制 -D
git branch -d (branchname)
## 分支关联
git branch --set-upstream-to=<origin/远程分支> <本地分支>
3.2 分支暂存更改 - stash
git stash // 暂时储存未提交到缓存区的更改
git stash list // 查看所有暂存
git stash apply stash@{$num} // 应用指定缓存,不删除
git stash pop stash@{$num} // 应用指定缓存,并将其删除
## 删除缓存
git stash drop stash@{x} // 删除指定缓存
git stash clear // 清空所有缓存
3.3 分支切换 - checkout
## 分支切换
git checkout (new-branchname)
a. 当工作区workspace/缓存区staging area 当中无内容时
-> 可以直接分支切换
b. 若工作区workspace/缓存区staging area 当中有内容时
b.1 -> 不冲突会将更改带入新分支
b.2 -> 发生冲突无法完成分支切换(需要commit)
## 撤销工作区中指定文件的修改(必须要先被上传到缓存区进行追踪)
git checkout (filename)
## 基于本地某分支新建分支
git checkout -b new-branch branch
## 基于远程某分支新建分支
git checkout -b <本地分支名> origin/<远程分支名>
3.4 分支差异 - diff
## 比较workspace 与 staging area 区别
git diff
## 比较 staging area暂存区与 local repository本地仓库 区别
git diff --cached
## 比较两个分支最后 commit 的内容的差别
git diff <分支名1> <分支名2>
3.5 分支合并 - merge
## 分支合并(merge 是基于当前本地仓库内容进行合并的,即合并是合并commit过后的内容)
git merge <分支1> // 将分支1 合并到当前分支上
原理:递归三路合并算法
原理:当两个分支进行合并操作时,会首先找到两个分支的最近公共父节点,然后以公共父节点 + 合并A节点 + 合并B节点三个节点
作为基准,只有在 A 与 B 节点合并发生冲突时才会需要人为介入合并,否则(A修改B未修改保留A,B修改A未改保留B,A与B同时修改内容一致同时保留,A与B都未修改则保留原有内容)系统都会自动进行合并.
4. 代码提交/拉取
4.1 代码提交 - push
x.1 提交本地仓库
git add . // .表示当前目录, 将当前目录下的所有文件都提交到 staging area暂存区(可切换成指定文件)
git commit -m "xxxxx" // 提交到本地仓库,并添加 xxxxx 信息备注
x.2 上传远程仓库(push)
## 默认代码上传push
git push <远程主机名> <本地分支名>:<远程分支名>
## push上传(本地分支名与远程分支名相同,则可以省略冒号)
git push <远程主机名> <本地分支名>
## 本地的 `main` 分支与远程仓库 `origin/main` 分支关联, 在以后的推送和拉取操作中,就可以使用 `git push` 和 `git pull` 命令,而不必指定远程分支的名称。
git push -u <远程主机名> <本地分支名>
## 删除远程分支(需本地分支与远程分支同步)(本地分支无影响)
git push origin --delete Test_XiaoMing
4.2 代码拉取 - pull
x.1远程代码拉取 pull
## 默认代码pull拉取方式
git pull <远程主机名> <远程分支名>:<本地分支名>
## 补充(pull成功, 但是文件未更新, 可能是暂存区与工作目录有缓存)
git reset HEAD . // 清除缓存区(staging area)缓存
git checkout . // 放弃掉所有还没有加入到缓存区(git add)的修改
## 允许冲突强制拉取
git pull origin main --allow-unrelated-histories