Git
版本管理工具
功能:
- 协同修改
- 数据备份
- 版本管理:svn有的是增量式管理的方式,git采用快照的方式
- 权限控制
- 历史记录
- 分支管理
集中式版本控制工具:CVS、SVN、VSS
分布式版本控制工具:Git、Mercurial、Bazaar、Darcs
Git优势:
- 大部分操作在本地完成,不需要联网
- 完整性保证
- 尽可能添加数据而不是删除或修改数据
- 分支操作非常快捷流畅
- 与linux命令全面兼容
Git命令行操作
本地库初始化
命令git add
注意:.git目录中存放的是本地库相关的子目录和文件,不要删除,也不要胡乱修改
设置签名
用户名:tom
Email地址:tom@qq.com
作用:区别不同开发人员的身份
辨析:这里设置的签名和登录远程库(代码托管中心)的账号密码没有任何关系
命令:
- 项目级别/仓库级别:仅在当前本地库范围内有效
- git config user.name tom
- git config user.email tom@qq.com
- 信息保存位置:.git/config
- 系统用户级别:登录当前操作系统的用户范围git config --global
- git config --global user.name tom_glb
- git config --global user.email tom_glb@qq.com
- ~/.gitconfig
- 优先级:就近原则,项目级别优先于系统用户级别
- 不允许都没有
查看状态操作
创建一个文件 后
添加到暂存区
移除暂存区
提交
改了文件后
再次提交
查看历史
只显示一行
显示短短一行
移动head指针
改文本后进行比较
提交到缓存区后想再看
和历史版本比较
小结:
- 状态查看操作:
git status
- 添加操作:
git add [filename]
- 提交操作:
git commit -m "commit message" [filename]
- 查看历史操作:
git log
git log --pretty=oneline
git log --oneline
git reflog
:HEAD@{},head指针移动到其需要几步
- 基于索引值操作:git reset --hard [局部索引值]
- 使用^:只能往后,
git reset --hard HEAD^^
几个^就移动几行 - 使用~:只能往后,
git reset --hard HEAD~n
n表示后退几步 - 比较文件差异:
git diff [filename]
。- 提交到缓存区后想再看
git diff HEAD [filename]
。 - 和历史版本比较
git diff HEAD^ [filename]
。 - 不带文件名比较多个文件
- 提交到缓存区后想再看
reset的三个参数对比
- soft:仅仅在本地库移动HEAD指针
- mixed:在本地库移动HEAD指针,重置暂存区
- hard:在本地库移动HEAD指针 ,重置暂存区,重置工作区
删除文件找回:
前提:删除前,文件存在时的状态提交到了本地库
分支管理
在版本控制中,使用多条线
分支的好处:
- 同时并行推进多个功能开发,提高开发效率
- 各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。
操作:
- 查看分支
git branch -v
- 添加分支
git branch [分支名]
- 切换分支
git checkout [分支名]
- 合并分支
- 切换到接收修改的分支上(增加新内容)
- 执行merge命令
git merge [分支名]
若造成冲突
修改完提交即可,提交时不用加文件名
GitHub
现在上面建一个远程仓库
然后在git上绑定
查看:git remote -v
添加:git remote add origin [地址]
push操作:git push origin [分支名]
克隆:git clone [克隆地址]
克隆效果:
- 完整的把远程库下载到本地
- 创建origin远程地址别名
- 初始化本地库
修改后需想提交,需加入成员
Pull操作
先从远程仓库下载下来:git fetch origin master
再进入origin/master 检查文件:git checkout 'origin/master'
返回master,确定合并:git merge origin/master
也可以直接git pull origin master
解决冲突,和之前差不多