Git
git本地库与远程库的交互方式
- git本地结构
- 团队内部协作
- 跨团队合作
-
托管中心分类
- 局域网环境下:可以搭建Gitlab服务器作为代码托管中心,Gitlab可以自己去搭建
- 外网环境下:可以有GitHub或者Gitee作为代码托管中心,GitHub或者Gitee是现成的托管中心,不用自己去搭建
初始化本地仓库
-
查看本地仓库:
git --version
-
清屏:
clear
-
设置用户名和邮箱
git config --global user.name “姓名”
git config --global user.email “邮箱地址”
-
本地仓库的初始化:
git init
-
./git
下的文件不要乱动
git常见命令
add和commit命令
- 创建一个文件
- 将文件提交到暂存区:
git add Demo.txt
- 将暂存区的内容提交到本地库:
git commit -m "提交的第一个文件 Demo.txt" Demo.txt
status命令
git status
查看工作区与暂存区状态
- 红色为工作区未提交到暂存区的文件
- 绿色为暂存器未提交到本地库的文件
- 修改Demo.txt文件,再次
git status
查看状态,git会提示你有文件需要更新,需要重新执行add
与commit
命令将文件更新到本地库
log命令
查看提交记录,从近到远显示日志
-
提过记录过多,一页展示不下,有分页效果
- 下一页:空格
- 上一页:b
- 到尾页,最底下会显示END
- 退出:q
-
查看提交记录的几种方式
-
git log
-
git log --pretty=oneline
git log --online
-
git reflog
- 比
git log --oneline
多了HEAD@{数字} - 数字代表的意思是:指针回到当前版本需要走多少步
- 比
reset命令
前进或者后退历史版本
-
git reset--hard 回退版本的哈希值(索引)
-
复制:在终端中选中即复制
-
粘贴:右键 paste
-
reset的三个参数
--hard
本地库指针移动的同时,暂存区、工作区版本也跟着变--mixed
本地库指针移动的同时,暂存区版本跟着变,但是工作区版本不变--soft
本地库指针移动的同时,暂存区、工作区版本都不变
rm删除工作区文件,reset恢复文件
-
删除文件
rm test.txt
删除工作区中名为test.txt文件git add test.txt
:将删除操作同步到暂存区git commit -m '删除text.txt文件' test.txt
:将删除操作同步到本地库
-
恢复删除文件
git reset --hard 版本的哈希值(索引)
:可以实现恢复删除文件的效果- 小技巧:如果删除了工作区中的文件,并且已经将删除操作同步到了暂存区,也可以用此方法,效果相当于撤销删除操作
diff
git diff
:比较工作区与暂存区中所有文件差异git diff 文件名
:比较工作区与暂存区对应文件名文件内容的差异git diff 哈希值(索引) 文件名
:比较暂存区与对应哈希值本地库的对应的文件名 文件内容的差异
分支
什么是分支
-
在版本控制中,使用多条线同时推进多个任务,这里面说的多条线,就是多个分支
-
通过一张图展示分支
-
分支的好处:
- 同时多个分支可以并行开发,互相不耽误,互相不影响,提高开发效率
- 如果有一个分支功能开发失败,直接删除这个分支就可以了,不会对其他分支造成任何影响
操作分支
git branch -v
:查看分支git branch branch01
:创建了一个名为branch01的分支git checkout branch01
:切换到名为branch01的这个分支
合并分支
将branch01分支合并到master主分支中
-
git checkout master
:切换到主分支 -
git merge branch01
:将branch01合并到master主分支
-
出现了冲突,查看冲突:
cat Test4.txt
查看或者直接去文件查看 -
解决冲突:
- 决定冲突文件的去留,到底使用哪个方案,将不要的文件删除
git add Test4.txt
:提交到暂存区git commit Test4.txt -m '冲突已经解决了'
:提交到本地库(注意这里不要写文件名,否则会报错!)
GitHub
基本使用
-
GitHub创建一个项目
-
在本地创建本地库
-
在Code中获取路径
-
git remote -v
:查看设置别名列表 -
git remote add origin github项目地址
:为项目地址创建一个名为(origin)的别名 -
git push origin master
:将master主支中本地库文件提交到远程库 -
git clone 远程库地址
:将远程库中文件克隆到本地git checkout origin/分支名
:切换远程库分支cat 文件名
:查看文件信息
-
拉取与合并远程库操作
- 程序员对远程库进行了修改,产品经理可以通过
git fetch origin master
进行抓取操作,只是将远程库的内容下载到本地,工作区中内容没有更新, - 抓取后可以去远程库看看内容是否正确
- 然后发现内容都正确,
git merge origin/master
可以进行合并操作(合并之前将分支切换回来) - 拉取和合并两个操作可以用一个操作取代:
git pull origin maste
- 程序员对远程库进行了修改,产品经理可以通过
-
如果别的程序员想要向远程库提交文件,需要进行成员邀请
- 在setting中输入成员名字,邀请成员
- 复制邀请链接
- 将邀请链接给你要邀请的那个人
- 被邀请的人通过此链接接收成员邀请
-
协同开发出现两个程序员同时修改同一个分支的同一个文件,产生冲突
git pull origin master
:将文件拉取到本地库与工作区- 人为解决冲突
- add commit 两部曲提交到本地库(注意commit时最后不要加文件名)
git push origin master
:提交到远程仓库
-
跨团队合作
- 获取项目GitHub地址
- 进入账号,复制进入地址,点击fork操作
git clone GitHub地址
:克隆到本地- 写功能
- 将文件从本地库提交到远程库
- 进行Pull requests操作
SSH免密登录
-
进入用户主目录中
cd ~
-
执行命令,生成ssh.的目录
ssh-keygen -t rsa -C 邮箱地址
-
我们发现主目录.ssh中多了两个文件
- 我们打开后缀为.pub的文件,将里面的内容全都复制出来
- 进入自己的github账号,
- 在setting中SSH and GPG keys中将复制的东西粘贴进去并取名字
-
给SSH取别名:
git remote add origin_ssh ssh地址
(用ssh地址对应的项目仓库起了origin的别名) -
使用别名向github远程库提交文件:
git push origin_ssh master
(将master分支上的文件提交到别名为origin_ssh的远程库)