Git&GitHub之命令行操作
Git&GitHub之命令行操作
Git作为分布式版本控制工具,分支操作是其最大杀器,这点与集中式版本控制工具SVN大不相同,且大部分操作可在本地完成,并不需要联网,除非用到GitHub或码云这些远程库,下面我们就来学习一下这个强大的版本控制工具吧,首先来体验一波命令行的魅力。
1、Git的一般结构(这里不包括分支)
2、Git操作的具体流程
本地提交
前提:下载并安装好git工具
首先先创建一个项目,并利用Git Bash进入命令行界面。
使用命令初始化为git项目:git init
之后会出现一个.git文件夹,说明初始化成功
设置一个系统级别的签名,顾名思义,设置一次,以后的项目就不用设置了
需要设置用户名和邮箱,文件信息保存在家目录下:~/.gitconfig
命令:git config --global user.name 用户名
git config --global user.email 邮箱地址
新增一个文件,并从工作区添加到缓存区中
命令:git add [文件名]
查看文件的状态可以用以下命令,绿色则代表已经在缓存区了,红色则还没add添加,没显示的话,那就是在本地库中了。
命令:git status
再把文件从缓存区添加到本地库,其中-m参数所带的提交信息是必须
命令:git commit -m "提交信息" [文件名]
以上操作就是把文件提交到了本地库了
远程提交
先去GitHub创建一个项目
地址分为两种方式:
第一种:HTTPS:提交时需要输入GitHub的用户名和密码
第二种:SSH:在提交时需提前在本机生成一个**,然后去GitHub上面绑定,以后的提交都不需要做任何操作。**生成的地址在家目录下:~/.ssh/id_rsa.pub文件
SSH生成**的命令:ssh-****** -t rsa -C [邮箱名]
位置:头像->setting->SSH and GPG keys->New SSH key,把**粘贴进去就行
回到git bash先给远程地址名创建别名,因为一直用那么长的地址提交很是不方便
命令:git remote add [别名] [远程地址名]
这时就可以正式推送给远程库了
命令:git push [远程地址别名] [本地分支名]
以上的操作就完成了项目的远程提交了
远程拉取
远程拉取分为两种:
第一种:pull
命令:git pull [远程地址别名] [远程分支名]
pull拉取需要本地已经创建好了仓库,然后去拉取远程的内容,相当于fetch和merge的综合操作。一般用于拉取自己已经push过的项目
第二种:clone
命令:git clone [远程地址名]
clone拉取不需要本地的任何操作,拉取下来的同时也会同时初始化完成。一般用于去github拉取别人的项目
下面就演示下git clone,以github上一个优秀项目为例,git pull同理
开始clone
clone完成
Git的版本切换
想要切换版本,必须要查看历史版本
命令:git reflog
或git log、git log --pretty=oneline、git log --oneline
切换版本(前面第一列的值代表局部索引值,唯一表示该版本)
命令:git reset --hard [局部索引值]
参数:--hard:本地库移动HEAD指针,重置暂存区,重置工作区(三个区都切换了版本)
--mixed:本地库移动HEAD指针,重置暂存区(两个区切换了版本,不加参数就默认mixed)
--soft:本地库移动HEAD指针,重置暂存区(仅一个区切换了版本)
切换到第二次提交的版本,局部索引值:21e0672
Git的分支管理
Git的分支图
创建分支:git branch [分支名]
查看本地分支:git branch -v
查看本地和远程分支:git branch -v -a
切换分支:git checkout [分支名]
在新的分支上增加点内容,再合并(记得add并commit才算新增内容到本地库)
合并分支:git merge [有新内容分支名](前提是已经切换到被合并的分支)
冲突:若在hot_fix修改某一行数据时,master也恰好在修改同一行数据,在合并merge时就会发生冲突,这时的冲突git是无法自动帮我们解决的,需要手动解决冲突,该保留哪些数据,要人为决定
解决冲突步骤:
第一步:编辑冲突文件,删掉发生冲突后自动增加的特殊符号,并主观保留hot_fix还是master修改后的内容,保存退出。
第二步:git add [文件名]
第三步:git commit -m "提交信息" (这时不能带文件名,否则会发生错误)