git命令学习
1. 绑定邮箱和用户名
$ git config --global user.name "chubowen"
$ git config --global user.email "chubowen666@outlook.com"
2. 新建空目录并创建版本库
2.1 新建目录
$ mkdir 褚博文实验
$ cd 褚博文实验一
$ pwd
2.2 初始化
$ git init
2.3 添加文件
$ git add readme.txt
2.4 提交文件到仓库
$ git commit -m "my frist readme file"
3. 修改版本库
3.1 查看当前仓库状况
$ git status
3.2 查看版本异同
$ git diff readme.txt
3.3 获取版本日志
$ git log
3.4 回退上个版本
$ git reset --hard HEAD^
此处的HEAD^为分支的指针
3.5 显示当前文件的内容
$ cat readme.txt
3.6 撤销前一步的提交或暂存
$ git checkout -- file
-
readme.txt
自修改后还没有被放到暂存区,撤销修改就回到和版本库一模一样的状态 -
readme.txt
已经添加到暂存区后又作了修改,撤销修改就回到添加到暂存区后的状态
3.7 删除文件
$ rm delet.txt
此时若删除错误,可以使用:
$ git checkout -- delet.txt
来撤销删除操作
4.远程库操作
4.1新建SSH key
$ ssh-keygen -t rsa -C "chubowen666@outlook.com"
此时,在GitHub或Gitee中设置SSH key,添加公钥
4.2 把远程库下载到本地
如下载github或gitee的远程库到本地
$ git remote add origin git@github.com:imCBW/myfirst.git
$ git remote add origin git@githee.com:褚博文/myfirst.git
4.3 推送本地库到远程库
$ git push -u origin master
由于远程库是空的,我们第一次推送master
分支时,加上了-u
参数,Git不但会把本地的master
分支内容推送的远程新的master
分支,还会把本地的master
分支和远程的master
分支关联起来,在以后的推送或者拉取时就可以简化命令
$ git push origin master
下次直接用这个命令就行了
4.4 将远程库clone到本地
$ git clone git@github.com:imCBW/myfirst.git
5. 分支设置
5.1 创建分支并切换分支
$ git checkout -b cbw
相当于这两个命令:(1.创建分支 2.切换分支)
$ git branch cbw
$ git checkout cbw
5.2 合并分支
$ git merge cbw
意思是将cbw分支合并至master分支
5.3 分支管理
$ git merge --no-ff -m "merge with no-ff" cbw
意思是将cbw分支不删除地合并至master分支中
”首先,master
分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在cbw
分支上,也就是说,cbw
分支是不稳定的,到某个时候,比如1.0版本发布时,再把cbw
分支合并到master
上,在master
分支发布1.0版本;
你和你的小伙伴们每个人都在cbw
分支上干活,每个人都有自己的分支,时不时地往cbw
分支上合并就可以了。”
(摘自廖雪峰的git教学官方网站)
$ git merge --no-ff -m "merge with no-ff" cbw
通常,合并分支时,如果可能,Git会用Fast forward
模式,但这种模式下,删除分支后,会丢掉分支信息
如果要强制禁用Fast forward
模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息
5.4 Bug分支管理
$ git stash
可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作
$ git stash list
寻找Bug修复的工作区
$ git stash pop
恢复工作现场,同时删除stash的内容
在master分支上修复的bug,想要合并到当前cbw分支,可以用git cherry-pick <commit>
命令,把bug提交的修改“复制”到当前分支
5.5 强行删除分支
$ git branch -D cbw-newBranch
强行删除代号为newBranch的cbw分支
5.6 多人协作
$ git remote
gitee
github
查看远程库
$ git remote -v
gitee git@gitee.com:褚博文/learngit.git (fetch)
gitee git@gitee.com:褚博文/learngit.git (push)
github git@github.com:imCBW/learngit.git (fetch)
github git@github.com:imCBW/learngit.git (push)
查看远程库详细信息
$ git push gitee master
推送至远程库gitee的master分支
6. 标签管理
6.1 创建标签
$ git tag v1.0
给当前分支打上v1.0的tag
$ git log --pretty=oneline --abbrev-commit
f6bfb4e (HEAD -> master, tag: v1.0) update a new file use sourcetree
675f8b9 branch test
4c4a7de remove test
d896455 add test
4a66618 the new readme change
7ab0882 git track changes
34e6d0e modified and add a license file
5300559 wrote a readme file
b3da3ef wrote a readme file
找到历史的commit id,延后通过下列代码给某操作赋新的版本标签:
$ git tag v0.9 675f8b9
(即给“675f8b9 branch test”这一步加上v0.9的标签)
$ git tag
用该命令查看当前所有的tag
$ git tag -d v0.1
标签出错了,可以用 -d 进行删除
$ git push origin v1.0
该命令为将标签 v1.0 推送到远程
$ git push origin :refs/tags/v0.9
该命令为远程删除标签,当然,要先从本地删除
主要参考: