Git详细使用三部曲(二)
之前写了一篇关于Git的基本使用三部曲的博客-Git详细使用三部曲,通过项目详细介绍了Git有关add commit 和push的使用,今天就来讲讲更加高级的命令,保证你在项目开发中用得着。项目依然使用上次的项目,下面就步入正题吧。
这次我们还是会按照开发流程来讲解这些命令的使用,具体会讲解到的命令如下:
功能 | 命令 |
---|---|
创建分支命令 | git branch |
创建分支并且切换分支 | git checkout |
rebase命令(可以处理冲突和合并提交) | git rebase |
恢复进度 | git stash |
重置代码 | git reset |
查看历史信息 | git reflog |
里程碑 | git tag |
- 1 Git branch|checkout 假如我们现在有一个新的task,需要项目中加一个工具类来判断一个应用是否安装,那么我们就先需要建立一个分支来开发我们的功能,我们的代码都是提交到master分支的,换言之也就是master作为主分支,都是从master分支分出新的分支来开发的,master肯定是最新的代码,我们先看git branch和git checkout命令:
功能 | 命令 |
---|---|
创建分支基于当前头指针(不切换分支) | git branch [branchname] |
创建分支基于某一个提交(不切换分支) | git branch [branchname] [start-point] |
基于当前分支创建并且切换分支 | git checkout -b [branchname] HEAD |
基于当前分支前一个分支创建新分支 | git checkout -b [branchname] HEAD~1 |
我习惯使用git checkout -b [branchname],因为创建后就直接切换到branchname上,免得重新操作一步骤,我们现在使用git checkout -b add-package-utils,如下图,这样分支就创建并且切换好了。
- 2 git rebase命令:这个命令在开发中用到的比较高频,只要不是一个人搞开发,基本都会用到,这个命令的使用场景如下:比如现在同时在master分支上创建了一个分支A,和B,分别搞开发任务A,B;等A任务开发结束,提交A并且合并到master后,这时候如果B任务也开发结束了,要提交的话,仅仅通过push想合并到master是会起冲突的,因为这时候的B分支已经不是基于最新的master分支了(因为从master分支创建B分支后,master分支又合并了一个A),所以这时候想要解决的话就要用到rebase命令了:
功能 | 命令 |
---|---|
基于master或者commitId进行rebase到最新 | git rebase -i master/commitId |
继续rebase | git rebase --continue |
跳过rebase | git rebase --skip |
停止rebase | git rebase --abort |
一般我们有冲突后,需要解决冲突,然后git add下,然后调用git rebase --continue命令,一般就会提示成功了,这时候就可以继续操作了。
- 3 git stash命令: 使用场景是:有时候我们正在开发一个任务,突然有一个bug需要修改,我们当前的代码怎么办?方法有很多,可以commit一下,等会reset回来;也可以stash命令操作,这里着重分析一下stash命令:
功能 | 命令 |
---|---|
切换到其它分支前保存当前工作区代码 | git stash |
然后切换回来的时候 | git stash pop |
详细保存当前代码 | git stash save [commit content] |
显示保存的stash列表 | git stash list |
恢复保存的某一个进度 | git stash apply stash@{n} |
删除某一个stash标记 | git stash drop stash@{n} |
清除stash | git stash clear |
我们这里显示保存了两个stash信息,然后drop了stash@{0},通过stash list查看,只剩下一个stash信息,stash@{1}自动变成了stash@{0},git stash clear后在stash list查看,stash信息没有了。stash命令的作用在开发中可以被reset替代的,使用频率不是很高,但是看个人使用命令爱好。
- 4 git reset的使用 使用场景:当我们想重置我们的代码到某一个commit的时候,就会使用到这个命令。我们都知道Git的代码分为三个区域保存,我在上一篇文章中讲过,reset的三个命令分别针对这三个区域发挥作用,命令如下:
功能 | 命令 |
---|---|
仅仅替换引用指向 | git reset – soft [commit] |
执行替换暂存区内容和引用(默认)eg:git reset HEAD用HEAD指向的目录树重置暂存区 | git reset – mixed [commit] |
将执行替换工作区和暂存区以及指针引用 | git reset – hard [commit] |
说到reset命令,不得不提一下revert命令,这两个命令的差别是如下:
差别 | 命令 |
---|---|
revert的提交记录会保存到记录中 | git revert |
reset的记录会丢失 | git reset |
如下图,git revert 37c7c41后,查看log信息,多了一条revert的信息。
Note: 命令git reset --hard [commit]要慎用,因为会把你工作区域的代码也给覆盖掉,但是也不是没有解决的办法,使用git reflog命令就可以查看最近的提交信息,有了这个commit的信息,然后就可以使用reset命令重置代码到某一个提交了:
- 5 git tag 使用场景:tag是里程碑的意思,一般我们会在版本发布的时候对这一段的代码进行里程碑操作,使用git tag命令:
功能 | 命令 |
---|---|
创建tag | git tag -m [msg] [tagname] [commit] |
查看tag列表 | git tag -l 或者git tag --list |
删除tag | git tag -d [tagname] |
推送tag到远端 | git push origin [tagname] |
**Note:**我们在这里打的tag是不会随着push branchname命令直接就推送到远端的,原因很简单,如果这样的话我们的tag库岂不是都被大家搞的很乱,只有在使用针对tag的push才会将tag信息同步到远端,就是上面表格中最后一个命令。
好了,今天的博客就写到这里了,有问题和意见欢迎评论区留言。