Git 版本控制
起始配置
第一次使用 Git 的时候,我们需要配置姓名和邮箱,让 Git 知道当前开发者的基本信息
git config --global user.name "John Doe"
git config --global user.email [email protected]
可以使用 git config --list
或git config -l
命令来查看配置信息
常用命令
# 初始化仓库
git init
# 查看仓库状态
git status
git status -s # 简洁模式
# 添加文件到暂存区
git add <file>
git add . # 添加所有文件
# 提交文件到仓库
git commit -m "commit message"
# 删除暂存
git rm --cached <file>
# 对比差异
git diff # 工作区和暂存区的差异
git diff --cached # 暂存区和仓库的差异
# 查看提交历史
git log
git log --oneline # 简洁模式
# 克隆仓库
git clone <url>
# 添加远程仓库
git remote add origin <url>
# 显示远程仓库地址
git remote -v
# 推送到远程仓库
git push -u origin main # -u 参数表示关联远程仓库和本地分支
git push origin main
# 从远程仓库拉取
git pull origin main
分离 Head
通过 git checkout <hash>
命令可以切换到指定的提交,此时 HEAD 指针会指向指定的提交,但是此时工作区和暂存区是分离的,不会自动同步。
git checkout <hash>
版本回退
- 硬回退
- 将当前分支的 HEAD 指针移到指定的提交
- 修改暂存区和工作区的文件,与指定提交完全一致
- 注意: 这种方式会丢失回退之后的代码改动
git reset --hard <hash>
git reset --hard HEAD^ # 回退到上一个提交
git reset --hard HEAD~1 # 回退到上一个提交
- 软回退
- 将 HEAD 指针移到指定的提交
- 暂存区不变,工作区的文件保留当前的改动
- 通常用于想要重新整理提交
git reset --soft <hash>
git reset --soft HEAD^ # 回退到上一个提交
git reset --soft HEAD~1 # 回退到上一个提交
- 混合回退
- 将 HEAD 指针移到指定的提交
- 暂存区重置,但工作区的文件保留当前改动
git reset --mixed <hash>
- 回滚提交
- 生成一个新的提交,撤销指定提交的更改
- 不会修改历史记录,适合在多人协作的情况下使用
git revert <hash>
git revert HEAD # 撤销最后一次提交
git revert HEAD~1 # 撤销上一个提交
修改提交
git commit --amend -m "commit message"
具有两个功能:
- 修改最后一次提交的提交信息
- 将新的修改合并到最后一次提交中
忽略文件
.gitignore
# 忽略任何路径下的名为 temp 的文件、文件夹
temp
# 忽略任何路径下以 .log 结尾的文件
*.log
# 忽略根目录下的 dist 文件,不会忽略其他目录下的 dist 文件
/dist
分支操作
分支是 git 的一个重要特性,它可以让开发人员从主线上分离出来,在一个独立的线路上继续开发,最后可以灵活的选择合并分支,还是丢弃分支。
创建分支
git branch <branchname>
查看分支
git branch # 查看本地分支
git branch -v # 查看本地分支
git branch -r # 查看远程分支
切换分支
git checkout <branchname> # 切换分支
git checkout -b <branchname> # 创建并切换到新分支
# 推荐使用 switch
git switch <branchname> # 切换分支
git switch -c <branchname> # 创建并切换到新分支
删除分支
git branch -d <branchname> # 删除分支
git push <remote> -d <branch> # 删除远程分支
git push origin -d feature
merge
1️⃣ 快速合并
例如我们有 main 和 test 两个分支,test 分支是领先于 main 分支的,且 test 分支包含 main 的所有历史记录,那么这时就可以触发 git 的快速合并。无需填写提交信息
git merge test # 将 test 分支合并到当前分支
2️⃣ 提交合并
当进行分支合并时,若两个分支有不一致的版本,则会提示输提示输入提交信息,在当前分支形成一个新的提交记录。
rebase
在 Git 中,合并(merge)和变基(rebase)都是用于整合来自不同分支的更改的操作,它们的区别如下:
合并:将两个分支的历史合并在一起,git 会创建一个新的“合并提交”,所有的分支和合并点都会被保留在历史中,有完整的历史记录。
变基:将一个分支(test)上的提交重新应用到另一个分支(master)上,变基会重写项目历史,因为它实际上是在创建一系列新的提交,会产生一个更线性的历史记录,看起来更干净、更简单。
cherry-pick
将指定提交应用到当前分支,通常用于将其他分支的提交应用到当前分支。
git cherry-pick <commit>