写在前面:
开发过程中经常使用Git,但有时候对一些命令还是会不够熟悉,正巧又看到一篇讲到Git一些不常见操作的文章,在这里做个总结
Git的简介
Git的全称是Git Version Control System,它是一个分布式的版本管理系统.
分布式: 代码不仅保存在集中式服务器上还存在于每个开发者的本地机器上。
具有以下功能:
- 分布式存储代码库,包括本地和远程仓库
- 进行版本管理,版本回溯以及差异比较
- 分支创建,利于协同开发
Git与SVN的对比
1. Git是分布式版本管理系统,可以在本地进行代码修改和提交
2. Git使用对象数据库存储代码,而SVN使用文件系统
3. Git的存储是基于快照的(记录文件当前的装填),而SVN是增量存储
> Git的每次提交,都是一张快照,它不是数据的完整拷贝,可以理解成只是数据的样子,
Git命令
1. 帮助
git xxx -help
2. 配置个人信息
git config --xxxx user.name <name>
git config --xxxx user.email <email>
git conifg --xxx --list
// 删除
git config --xxx unset user.name
// xxx 包括local/global/system,访问顺序从前到后。
3. 查看状态
git status
// 简略信息
git status -s
// `git status` 命令会比较当前工作目录中的文件状态与 Git 仓库中最新提交的状态(也就是 `HEAD` 指向的提交)之间的差异。
4. 查看提交记录
git log
git log --oneline
git log --oneline --graph: 以图形方式显示提交历史,展示分支、合并等操作。
// 每次提交都会生成一个哈希值,可以用于标识该次提交的唯一性。哈希值是通过对提交内容进行加密计算得出的,因此即使有微小的更改也会导致哈希值的变化
5. git 本地命令
// 添加到暂存区
git add <file>
git add .
git add -u // 不追踪文件
// 删除重命名/移动
git rm <file>
git mv <file1> <file2>
//删除rm、移动重命名mv可以本地修改,然后git add .记录变化,如果使用git命令,默认会记录到暂存区
// 提交
// git通过暂存区记录的文件差异,生成快照
git commit -m "xxx"
git commit -am "xxx" //这个命令会将所有已跟踪的文件的修改提交到本地仓库
git tag -a <tag_name> <commit> -m " " //为一个提交打上标签,并写上注释
// 版本回退
git checkout <commitID> // 检查之前的代码
git checkout <branch-name> // 回到分支的最新状态
git reset <commitID> // 版本回退
git reflog <branch-name> // git reflog默认会显示当前分支的HEAD的所有引用记录。
// reset 有三个参数 --soft --mixed(默认) --hard
// -- soft 不重置暂存区和工作区
// -- mixed 不重置工作区,重置暂存区
// -- hard 重置暂存区和工作区
// 文件回退
git checkout <commit> -- file.txt
// 差异比较
- 工作区和暂存区之间的差异(已追踪的文件) git diff
- 暂存区和最新提交之间的差异 git diff --cached
- 两个提交之间的差异 git diff <commit1> <commit2>
// 分支操作
git branch 列出所有本地分支
git branch -r 列出所有远程分支
git branch <branch-name>
git checkout <branch-name>
git checkout -b <branch-name> //创建且切换
git branch -d <branch-name> // 删除分支
git merge <branch-name> 合并分支
git branch -m <new-name> <old-name> // 更改分支名称
6. git 远程操作
// 克隆
git clone [params] <url> [dir] 克隆仓库,可以克隆到指定目录中
params:
1. --branch xxx 指定克隆远程仓库的某个分支(默认是主分支或者第一个分支)
2. --depth x 指克隆深度,代表只克隆几次提交
// 连接
git remote add <name> <url> 连接远程仓库,名称默认是origin
git remote remove <name> 移除远程目录
// 推送拉取
git push [-u] <origin> <master> 推送, 指定远程仓库以及分支名称,其中master代表本地的master以及远程仓库的master,如果名称不对应,可以另外指定,如master: main
git pull 拉取 , 指定远程仓库以及分支名称,git push origin develop:master,将远程仓库origin的develop分支合并到master分支上。
建议用-u进行关联,就可以直接git push和git pull了。