解决的问题
老规矩,学习一项新技术时候,先看他解决的是什么问题,怎么解决的,有没有什么局限性。
Git解决的是如何管理团队开发过程中代码版本,已经开发人员之间的协作问题。
解决方法:
版本管理使用本地库 和 分支的概念,相当于在本地有一整套的完整镜像,只有需要发布时候才同步到中央仓库中,这是和SVN这类CS版本管理的主要区别;当打版之后,进行封版操作,重新拉取新分支,用于后续开发。
核心原理
版本管理
Git会维护四个区域,分别是:
- Remote:远程仓库,代码托管的远端中央Git仓库
- Repository:本地仓库,保存提交过的各个版本,commit后到达这个区域
- index:暂存区,
git status
查看暂存区状态,标记已修改的文件 - workspace:工作区,开发内容,只有
git add file
后才能够被git托管。
分支策略
拉取一个代码的完全镜像,维护代码变更的状态,可以有选择的把两个版本进行合并。
分支解决的问题:
同时开发,并且互不影响。
Tag
标签,顾名思义,就是每次commit生成版本时候,做一个命名标记,后续便于追溯版本内容。
git tag tag_name:对当前版本打标签
git push --tag:将标签推送至源端库
git tag:查看当前所有tag
操作
知识点也符合28定理,20%的操作,能满足日常工作80%的需求。
常用操作
库管理
git clone remote_git_path:远端库拉取到本地
git init:初始化库
版本管理
提交代码
# 提交代码,将代码由缓存区提交至仓库(本地)
git commit -m "commit msg" file
#推到指定远端分支
git push -u origin master
切换版本
# 查看commit的版本提交历史
git log
# 回退后的版本,查看全量的commit id
git reflog
#回退版本,HEAD回退到上一个版本
git reset --hard HEAD^
#将git HEAD 切换到指定commit版本上
git reset --hard commit_id
同步远端库
# 本地库推送到远端库
git push
分支管理
创建分支
git branch dev:创建本地分支
git branch -r dev:创建远端分支
切换分支
git checkout branch_name:切换到指定分支
合并分支
git checkout master;
git merge dev:将dev分支切换到当前分支
拉取指定分支
不常用操作
# 查看开发区和暂存区的差异
git diff
#拉取远端版本
git fetch origin
git rebase origin/master
难懂的概念
fast forward
HEAD:标识当前版本
[TODO]
总结:
git是个用于团队代码协作的版本管理工具。
所有版本管理使用四个区域做管理;
团队协作问题使用分支解决;
为了在管理时候,信息更加友好,使用tag标注。