Git入门(一)
Git入门1
- Git <==
- 分布式版本管理系统 VS 集中式版本控制工具
- Git命令
- Git分支
- Idea 集成Git
- Github
- push
- pull
- clone
- SSH免密登录
- Idea集成Github
- Gitlab
Git
Git概述
- Git:免费开源的分布版本控制系统。
- 优点:占地面积小,性能极快,免费开源,有廉价的本地库、方便的暂存区以及分支。
- 版本控制:记录文件内容变化,方便查阅特定版本修订情况。
集中式版本控制工具 VS 分布式版本控制系统
集中式版本控制系统
- 集中化的版本控制系统:SVN\CVS。
- 特点:
- 有单一的集中控制服务器,保存所有文件修订版本。
- 客户端连接到服务器,取出最新文件或者提交更新。
- 缺点:
- 如果中央服务器挂了,大家都没法工作。
分布式版本控制系统
- 每台电脑都可以进行本地的版本控制,即使远程库挂了,只不过没法推送罢了。
- 每个客户端保存的也都是完整的项目(包含历史记录,更加安全)
- Git的历史吹水
- Linus本人手动合并代码来更新Linux
- 商业软件BitKeeper人道主义免费授权,但是要求不能被破解。
- 05年有人破解了,收回使用权。Linus用C语言两周开发了Git。
- 08年GitHub上线,jQuery、Ruby、PHP都将代码放到GitHub上开源
Git工作区域
工作区:代码存放的磁盘位置。-->git add 暂存区 -->git commit 本地库,存储历史版本。(生成版本后就删不掉了)-->git push 推送到远程库
代码托管重心--远程库
- 局域网:gitlab
- 互联网:GitHub、gitee
git常用命令
{% folding blue, Git常用命令 %}
- 设置用户签名:
- git config --global user.name 用户名
- git config --global user.email 邮箱
- 初始化本地库:git init
- 查看本地库状态:git status
- 添加到暂存区:git add 文件名
- 提交到本地库:git commit -m "日志信息" 文件名
- 查看历史记录:git reflog
- 版本穿梭:git reset --hard 版本号
{% endfolding %}
设置用户签名
签名作用:区分不同操作者身份。在每个版本的提交者信息可以看到。
git首次安装必须设置一下用户签名。这里的用户前面和GitHub上没有关系。
初始化本地库
查看隐藏文件:ll -a
演示git status
未添加的提示信息:
On branch master
No commits yet
Untracked files: 未被追踪的文件,在工作区
(use "git add <file>..." to include in what will be committed)
cpp/
nothing added to commit but untracked files present (use "git add" to track)
执行git add cpp/ 后: 添加到暂存区
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
执行git commit -m "C++刷题第一版" /cpp后:提交到本地库
On branch master
nothing to commit, working tree clean
历史版本和版本穿梭
-
查看版本信息:git reflog 查看版本信息、版本号、指针
-
查看详细信息:git log 查看提交者和提交时间
-
穿越版本,复制版本号后:git reset --hard 版本号
- 这时候查看文件内容,就会发现内容发生变化。
-
git切换版本,底层其实是移动HEAD指针。
- HEAD->MASTER->FIRST
- 每次移动都是改动MASTER
Git分支
分支理解
使用分支:程序员将自己工作从主线上分离开来,开发自己分支的时候不会影响主线。
分支可以简单理解为副本,底层实际上是指针引用。
主线分支1.0 --》颜色分支改动后合并到主线 --》主线分支1.1
游戏分支经历4个版本后合并到主线 --》主线分支1.2
- 分支好处:
- 同时并行推进多个功能开发,提高开发效率。
- 某个分支开发失败,对其它分支不会有影响。
{% folding blue, Git分支命令 %}
- 创建分支
- git branch 分支名
- 查看分支
- git branch -v
- 切换分支
- git checkout 分支名
- 把指定分支合并到当前分支
- git merge 分支名
- 在master上执行merge hot-fix 就是把hot-fix融到master上
- 正常合并:hot分支 基于master分支没改动 的基础上修改并merge。
- 冲突合并:合并分支的时候,在同一个文件的同一个位置有两套完全不同的修改。git无法决定使用哪一个,必须人为决定新代码的内容。
{% endfolding %}
演示冲突合并
- 冲突后merge时:
Auto-merging hello.txt
CONFLICT (content): Merge conflict in hello.txt
Automatic merge failed; fix conflicts and then commit the result.
状态:
(master|MERGING)
- 修改文件,vim hello.txt 人工增删 并且删掉特殊符号
- add到暂存区
- commit,注意不能带文件名!因为有两个分支
- 注意:只会修改master分支,不会修改hot-fix
移动分支的本质
master、hot-fix都是指向具体版本记录的指针。
当前所在的指针其实由HEAD决定,创建分支就是多创建一个指针。
切换分支的本质就是移动HEAD指针。
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 AjaxZhan
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果