git的基本使用
Git是目前世界上最先进的分布式版本控制系统。
SVN与Git的最主要的区别?
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就郁闷了。
Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
代码托管
- GitHub https://github.com/
- 码云 https://git.oschina.net/
- CSDN https://code.csdn.net/
用户名和邮箱
git config --global user.name "xxx"
git config --global user.email "10001226@qq.com"
因为Git是分布式版本控制系统,所以需要填写用户名和邮箱作为一个标识。
注意:git config --global 参数,有了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然你也可以对某个仓库指定的不同的用户名和邮箱。
生成ssh秘钥
cd ~/.ssh
//查看是否有这个文件夹,有就备份删除
ssh-keygen -t rsa -C "10001226@qq.com"
两个Linux机器之间登录使用ssh不需要用户名和密码,ssh秘钥提供一个认证。
rsa是数字签名 大写字母C是提供注释,把后面的邮箱添加到生成的文件中。
按3个回车,密码为空。
Your identification has been saved in /home/tekkub/.ssh/id_rsa.
Your public key has been saved in /home/tekkub/.ssh/id_rsa.pub.
The key fingerprint is:
最后得到了两个文件:id_rsa和id_rsa.pub
git基本操作
新建仓库(远程项目需要是空的)
- git init
生成代码仓库
- git add .
添加所有修改,如果只希望添加一个,可以使用git add 文件名
- git commit -m ‘提交注释’
提交代码到本地仓库
- git remote add origin 远程url
这个时候需要把公钥放在远程上
- git push -u origin master
第一次需要加-u参数,把本地的分支成为主分支。现在可以在远程上看到代码了
已有远程仓库
- git clone 远程url
远程url使用ssh的不要用https,https需要验证用户名、密码,太费劲。ssh直接用公钥验证。 - git add . && git commit -m “” && git pull && git push origin master
常用操作
-
git checkout -b dev origin/master
新建分支 分支是从远程master主分支上获取 -
git checkout 文件路径
撤销当前文件的修改- add又commit之后撤销修改因为之前已经 add 过了,所以先用如下命令让状态恢复到连 add 也没有过的时候
- git rm --cached 文件路径
- add又commit之后撤销修改因为之前已经 add 过了,所以先用如下命令让状态恢复到连 add 也没有过的时候
-
git branch -D dev
删除分支 必须不在当前分支上才能删除当前分支 -
git branch
查看分支,git branch -a 查看所有分支 -
git merge dev
把本地的dev合并到当前分支。git merge origin/dev把远程的dev合并到当前分支。 -
git push origin dev
把本地代码推送到远程dev分支。 -
git diff
查看文件不同- git diff 分支 分支 --stat
显示不同的文件列表 - git diff 分支 分支 文件路径
- git diff 分支 分支 --stat
-
编辑模式退出
shift+q,写内容保存退出 shift+wq -
git log
查看最近改动 -
回到过去:
git reset --hard commit_id
或者HEAD^
HEAD是指针 指向当前版本 HEAD^^指向上上个版本 HEAD~10指向上第10个版本
返回现在: git log 查看提交历史,找到你要的commit_id
### 其它 -
git remote prune origin
清理无效分支 -
git push origin --delete
分支名
删除服务器远端的分支 -
git remote show origin
查看当前项目的远程仓库
git commit 提交规范 & 规范校验
type
用于说明 commit 的类别,只允许使用下面7个标识。
feat
:新功能(feature)
fix
:修补bug
docs
:文档(documentation)
style
: 格式(不影响代码运行的变动)
refactor
:重构(即不是新增功能,也不是修改bug的代码变动)
test
:增加测试
chore
:构建过程或辅助工具的变动
图形化工具
- SourceTree
注意事项:
- 所有的版本控制系统,其实只能跟踪文本文件的改动,不能跟踪二进制文件内容的改动,不幸的是,Microsoft的Word格式是二进制格式,因此,版本控制系统是没法跟踪Word文件的改动的
- Git设计优秀主要是因为它跟踪管理的是修改,而非文件,每个文件只有一份,git会根据分支记录的修改去控制工作区中的文件的内容。
- master也是分支,但却是主分支,HEAD指针指向的分支是当前工作的分支,良好的开发方式是新建一个分支(名字可以是dev)进行开发,然后add、commit等,最后再切回master进行merge操作,master分支仅用来发布新版本。
- 本地创建的分支如果不推送到远程,对其他人就是不可见的。
- 修改文件未提交时切换分支,修改的内容会同步到切换到的分支上,直到提交之后。