前言
在平时开发过程中,一定的Git能力是必不可少的,如果对Git的概念或命令不熟悉,使用过程就需要badidu或google,所以在这个对Git的使用做一个总结。
Git区域概念
先上图:
-
暂存区
:这个区域就是我们每次执行 git add 之后会存到的区域,用来与本地仓库之间做一个缓存,同时也是 Git 底层设计上来说也算是比较重要的一个区域,它能帮助 Git 在做 diff 的时候提高查找性能。 -
工作区
:这个一般就是我们写代码的地方,比如你的 vscode 打开的项目,你可以进行代码编辑的地方。
stash
除了上述区域外,还有一个特殊的区域,就是本地的git存储区。你可能会在某些场景用到它,比方说,你正在开发某个featurue的代码,这时你的同事需要你马上解决其他分支的问题,而你正在开发的功能还没写完,不想提交到git仓库中,那么你就可以考虑使用git stash save '临时保存代码'
,等你解决其他分支的问题之后,就可以使用git stash pop
。该命令具体使用如下
git stash save 'xxx'
: 储存变更git stash list
: 查看储存区所有提交列表git stash pop
: 弹出并应用最近的一次储存区的代码提交git stash drop stash@{n}
: 删除某次储存记录git stash clear
: 清楚所有 stash 信息
git常用命令
git log
查看当前分支所有提交过的版本信息,不包括已经被删除的 commit 记录和reset的操作 常见用法:
git log
git log --pretty=oneline
只会显示版本号和提交时的备注信息
git reflog
查看所有分支的所有操作记录信息(包括已经被删除的 commit 记录和 reset 的操作)
git clone
常见用法:
git clone xxx.git
git clone xxx.git -b branch1
git init
初始化git仓库
git remote
常见用法:
git remote add origin xxx.git
git remote rm origin
git branch
常见用法:
git branch
:查看本地所有分支信息git branch -r
:查看远程仓库所有分支git branch -a
:查看本地和远程仓库所有分支
git checkout
常见用法:
git checkout dev
切换到指定的分支git checkout -b dev2
创建并切换到新分支git checkout -b [分支] [commitid]
以当前分支的commitid提交节点创建新的分支并切换到新分支
git add
将一个或多个文件添加到暂存区 常见用法
git add [file1] [file2]
git add .
把当前目录所有已改动的文件添加到缓存区git add -A
把当前仓库内已改动的文件添加到缓存区
git rm
假设我们有一个不需要提交到仓库的文件不小心提交到了远程仓库,如果仅仅是把这个文件添加到.gitignore
中是没有用的,需要先删除。直接右键删除的话,这个文件还是会被保存到远程仓库。
常见用法:
git rm [file1]
删除文件git rm -r [dir]
删除文件夹
git push
常见用法:
git push origin master
git pull
常见用法:
git pull origin branch1
拉取指定远端分支合并到本地当前分支git pull
当前分支已经和远端分支建立了联系
git pull
命令实际上就是其他两个命令的结合体,先git fetch
然后紧接着git merge
。
git fetch
常用命令
git fetch <remote>
Fetch仓库中所有分支。同时也会下载指定远端的所有commits和文件。git fetch <remote> <branch>
Fetch 指定分支git fetch --all
fetch所有已注册过的远端仓库的全部分支。
git merge
常见用法:
git merge master
合并master分支的内容
git reset
用法:
git reset [--soft | --mixed | --hard] [HEAD]
HEAD
- HEAD 表示当前版本
- HEAD^ 上一个版本
- HEAD^^ 上上一个版本
- HEAD^^^ 上上上一个版本
- HEAD~n 回撤 n 个版本
参数
--soft
: 重置你最新一次提交版本,不会修改你的暂存区和工作区。--mixed
: 默认参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。--hard
: 重置所有提交到上一个版本,并且修改你的工作区,会彻底回到上一个提交版本,在代码中看不到当前提交的代码,也就是你的工作区改动也被干掉了。
git revert
git revert 撤销某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销,作为一次最新的提交。
git revert是提交一个新的版本,将需要revert的版本的内容再反向修改回去,版本会递增,不影响之前提交的内容。
用法:
git revert HEAD
git revert HEAD^
git revert commitid
git cherry-pick
将一个分支上的某个commit合并到另一个分支,可用使用cherry-pick
命令实现。
常见用法:
git cherry-pick master commitId1 commitId2 commitId4
git rebase
变基,改变基底。feature分支是基于master分支的B拉出来的分支,feature的基底是B。而master在B之后有新的提交,就相当于此时要用master上新的提交来作为feature分支的新基底。实际操作为把B之后feature的提交先暂存下来,然后删掉原来这些提交,再找到master的最新提交位置,把存下来的提交再接上去(接上去是逐个和新基底处理冲突的过程),如此feature分支的基底就相当于变成了M而不是原来的B了。(注意,如果master上在B以后没有新提交,那么就还是用原来的B作为基,rebase操作相当于无效,此时和git merge就基本没区别了,差异只在于git merge会多一条记录Merge操作的提交记录)
常见用法:
git rebase master
git tag
常见用法:
git tag v1.0.0
轻量标签git tag -a v1.0.0 -m "发布正式版 1.0.0"
附注标签git push origin v1.0.0
推送标签git tag
查看标签git tag -l v1.0.0
筛选标签git tag -d v1.0.0
删除标签git push origin --delete v1.0.0
git提交规范
feat: 新功能(feature)
fix: 修补bug
docs: 文档(documentation)
style: 格式(不影响代码运行的变动)
refactor: 重构(即不是新增功能,也不是修改bug的代码变动)
chore: 构建过程或辅助工具的变动
revert: 撤销,版本回退
perf: 性能优化
test:测试
improvement: 改进
build: 打包
ci: 持续集成