介绍
用git管理代码有一段时间了,偶尔回想发现,自己只是机械的使用常用的一些操作,但是对Git其实没有真正的去了解,写篇文章记录下自己的学习过程及内容。
Git的历史
git的发明者是Linux的创造者“柯林斯”,因为参与Linux的开发者越来越多,所以需要项目管理工具。一开始他们选择的是BitKeeper,但是希望对方能开源的时候,对方没有理会。
所以“柯林斯”终止了与BitKeeper的合作,自己写了一套管理工具,并将之开源。这套工具就是git。
Git的安装
请百度
Git的使用
- 理解Git的工作原理
Git对于项目的内容,创建了三种区域: 工作区域 、 暂存区域 、 本地库区域。
完成上述的内容后,就是本地库与远程库的交互。具体如下图示:
除了上述的团队内部合作,还有跨团队的合作,如下图示:
- Git的相关命令
- 签名: git config --global user.name '前端阶梯'
- 邮箱: git config --global user.email '前端阶梯@qq.com'
- 初始化目录: git init
- 添加文件: git add "文件.xx" // 进入暂存区域
- 提交文件: git commit -m "提交说明,如:修改的操作说明" "文件.xx" // 进入本地库
- 查看状态: git status // 能够查看被管理目录的差异状态
- 操作日志: git log // 查看操作日志
- 操作日志分屏:下一步 空格键 、 上一页 b键 、退出 q键
- 其他日志1:git log --pretty=online
- 其他日志2:git log --online
- 其他日志3:git reflog
- 回退版本:git reset --hard 版本号,如下图:
- 回退版本1:git reset --mixed 版本号 // 工作区不变
- 回退版本2:git reset --soft 版本号 // 工作区和暂存区 不变
- 删除文件: rm 文件.xx // 只是删除工作区的内容,需要add 和commit 到暂存区和本地库
- 比对文件: git diff 文件.xx // 比对工作区 和 暂存区的区别
- 比对文件1:git diff // 比对所有文件
- Git的分支
- 查看分支: git branch -v
- 创建分支: git branch 分支描述
- 切换分支: git checkout 分支描述
- 合并分支: git merge 分支描述 ,如下图:
上图中,划线的地方说明分支正在合并的状态中。
- 查看文件: cat Demo3txt, 如下图:
冲突发生的原因是: 不同的分支,修改了同一个文件的同一行信息,导致冲突。
如何解决冲突:?? 协商处理,删除不需要的,如下图:
则告知冲突,冲突得到解决,但是还是在合并状态,需要做commit处理。 注意: commit 不可以带文件名
GitHub的使用
- 注册账号
上Github官网进行
- 创建远程库
如果想要公开,则选择public
- 本地创建远程库的别名
创建远程库完成后,进入对应的库可以看到如下:
如果本地库与远程库关联,需要记录库的地址:github.com/gaoyujin/xx… 不是特别的方便。 所以可以在本地库中创建别名。
-
查看远程列表: git remote -v
-
保存远程库地址: git remote add 别名 github.com/gaoyujin/xx…
-
推送远程库: git push origin 分支名称,如下图:
推送成功后,可以去远程库查看。
- 克隆代码: git clone 代码Url
完成三部操作: a、初始化本地库 b、将远程库内容完整的克隆到本地 c、替操作人创建远程库的别名
- 抓取代码: git fetch origin master
抓取后,只是存储到了本地库,没有进入工作区, 所以需要merge操作。
- 获取代码: git pull origin master // 这是 fetch + merge 的两步操作
如果需要确认代码,则使用fetch + merge;如果可以大胆获取,则直接使用pull
- 邀请团队成员
请百度
跨团队使用
- fork代码,如下图:
- 团队修改,请求提交,如下图:
SSH免密登录
-
操作命名:ssh-keygen -t rsa -C 邮箱地址, 三次回车。
-
然后找到生成的文件,如下图:
然后把文件:id_rsa.pub中的内容拷贝,黏贴到远程库的如下图:
这个就可以免密提交代码了。
在IDEA中集成git
- 点击settings,如下图:
- 找到Git配合,如下图:
- git初始化(命令:git init),如下图:
- 创建文件,提示Add(命令:git add),如下图:
- 无脑与远程库pull(命令:git pull 代码Url master --allow-unrelated-histories),如下图:
- 推送变更push(命令:git push -u 代码Url master -f),如下图:
- 忘记的一个命令: 根据当前的分支,创建一个新的分支 => git checkout -b production-image