Git
Git命令行操作
Git结构
本地仓库初始化
在桌面新建文件夹repositories 下任意新建文件夹
使用git init
命令 生成.git文件(隐藏文件)
.git目录中存放的是本地库相关的子目录和文件。
设置签名
-
形式
用户名:tom
Email地址:(标识开发人员身份)angel@qq.com
-
辨析:这里设置的签名和登陆远程库(代码托管中心)的账号,密码没有任何关系
-
命令
-
项目级别/仓库级别:仅在本地仓库范围内有效
git config user.name tom_pro git config user.email angel_pro@qq.com cat .git/config //查看设置签名
-
系统用户级别:登陆当前操作系统的用户范围
git config --global user.name tom_glb git config --global user.email angel_glb@qq.com //查看设置签名 cd ~ //回到系统目录 cat .gitconfig //.gitconfig是隐藏目录
-
级别优先级
就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别的签名。
-
添加提交文件以及查看状态操作
提交新文件
-
查看当前状态
git status
-
添加记事本文件
vim hello.txt
-
添加提交命令
将工作区的新建/修改添加到暂存区
git add [file name]
-
删除提交文件
git rm --cached 文件名.后缀
-
提交
将暂存区的内容提交到本地库
git commit [file name]
提交修改文件
-
查看当前状态
git status
-
添加提交信息
将工作区的新建/修改添加到暂存区
git add 文件名.后缀
-
提交
将暂存区的内容提交到本地库
git commit -m "commit message" [file name]
查看历史记录
git log //查看详细记录
git log --pretty=oneline //完整哈希值
git log --oneline //部分哈希值
git reflog //部分哈希值+指针 HEAD@{移动到当前版本步数}
#### 版本的前进后退
-
基于索引值操作(推荐)
git reset --hard [局部索引值]
-
使用^符号(只能后退版本)
git reset --hard HEAD^ //一个^符号表示后退一步,n个^符号表示后退n步
-
使用~符号(只能后退版本)
git reset --hard HEAD~n //n表示后退n步
-
reset三个命令对比
-
–soft参数
- 仅在本地库移动HEAD指针
-
–mixed参数
-
在本地库移动HEAD指针
-
重置暂存区
-
-
–hard参数
- 在本地库移动HEAD指针
- 重置暂存区
- 重置工作区
-
删除文件并找回
-
前提:删除前文件存在时的状态提交到了本地库
-
操作:
git reset --hard [指针位置]
-
删除操作已经提交到本地库:指针位置指向历史记录
-
删除操作尚未提交到本地库:指针位置使用HEAD
-
比较文件差异
-
git diff [文件名]
- 将工作区的文件和暂存区进行比较
-
git diff [本地库中历史版本] [文件名]
- 将工作区文件和本地库历史文件做比较
-
不带文件名比较多个文件
Git分支
什么是分支
在版本控制过程中,使用多跳线同时推进多个任务
分支好处
- 同时并行推进多个功能开发,提高开发效率
- 各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。
分支操作
-
创建分支
git branch [分支名称]
-
查看分支
git branch -v
-
切换分支
git checkout [分支名称]
-
合并分支
-
切换到接受修改的分支(被合并、增加新内容)上
git checkout [增加新内容的分支名]
-
执行merge命令
git merge [已经有新内容的分支名]
-
-
解决冲突
-
冲突的表现
-
冲突的解决
-
编辑文件,删除特殊符号
-
把文件修改到满意程度,保存退出
-
git add [文件名]
-
git commit -m "日志信息"
- 注意:此时时 commit 一定不能带具体文件名
-
-
GitHub
https协议仓库地址 远程推送
创建远程库
创建远程库地址别名
git remote -v //查看当前所有远程地址别名
git remote add [别名] [地址]
推送
git push [别名] [分支名]
ssh协议仓库地址 远程推送
如有原来有个别名(如clone的别人的仓库到本地的情形),则需要先删除别名。
git remote remove [别名]
创建ssh秘钥
ssh-keygen //生成ssh秘钥
在对应文件下,拷贝秘钥
在github上配置秘钥
创建远程地址别名
git remote -v //查看当前所有远程地址别名
git remote add [别名] [地址]
推送
git push [别名] [分支名]
克隆
命令
git clone [远程地址]
作用
- 完整的把远程库下载到本地
- 创建 origin 远程地址别名
- 初始化本地库
拉取
两个本地仓库sun 和moon
sun提交文件至远程仓库,moon从远程仓库克隆至本地仓库,将克隆的文件修改,重新提交远程仓库。
sun拉取远程仓库,获得新修改后的版本
-
git fetch [远程库地址别名] [远程分支]
-
git merge [远程库地址别名/远程分支]
-
git push [远程库地址别名] [远程分支] //pull= fetch+merge
解决冲突
-
要点
- 如果不是基于 GitHub 远程库的最新版所做的修改,不能推送,必须先拉取
- 拉取下来后如果进入冲突状态,则按照“分支冲突解决”操作解决即可
-
实例
-
两个本地仓库sun 和moon,拥有同一版本文件ddd.txt
-
sun提交修改文件至远程仓库,moon同时修改文件同一位置,提交远程仓库产生冲突。
-
解决冲突
-
moon使用git pull origin master操作
git pull origin master
-
修改文件以符合要求并提交
vim [file name] git add [file name] git commit -m "修改版本信息" //这里不要添加文件名
-
提交至远程仓库
git push origin master
-
-