git的起源与发展
(听别人说的……)
尊敬的linus先生写出了linux,很多人一起开发,修修改改,没有集中式版本控制工具怎么办呢? 有人赞助了(bitkeeper);然后呢,手痒看人源码去了,就被人给驱逐了;然后呢,大神就自己写了一个……
举个例子理解: 写了一篇论文,原稿自己改了几遍,同学改了几遍,老师改了几遍,老师可以要你第三遍的论文去修改,也可以要你初始的论文去修改,同学一样的…… 修订版大家写作都用过吧…… 还是有痕迹的…… 然后呢,这就相当于本地分支;但是这样子要你去发或者用u盘拷贝有点麻烦是不是,那就放云盘呗,谁想改谁去自己下载,但是说了,我有一个版本我觉得挺好的,你不能随便改,你改的时候告诉我本人一下…… 大概就是这个样子吧……
补充:SVN 集中化的版本控制系统,大家协同工作用同一个服务器。缺点:一旦服务器出现问题,所有人都不能提交更新,历史记录存放单一,出现问题可能面临版本丢失的问题;
GIT是分布式存储管理,客户端存的是原始代码的完整镜像,存储到本地,也就是说每一个客户端的代码仓库都是一样的,任何部分代码出现问题,可以使用其它客户端的代码进行修护;
版本控制系统进化史: 本地版本控制系统——集中式版本控制系统—— 分布式版本控制系统
git操作前补充
1、git分区 工作区(工作目录)、暂存区、本地仓库、远程仓库
工作区: 你可以对代码进行修改的那一部分; 暂存区 git add 之后 本地仓库 git commit之后 远程仓库 git push;
git操作
1、创建本地仓库(git init)
2、创建远程仓库(github) 注册账号—— 创建项目
3、本地环境配置与SSH配置
SSH 命令行 —— ssh-keygen 找到id_rsa.pub文件,将秘钥粘贴到github-settings-sshandGPGkeys 那一块;
本地环境配置——
git config --global user.name name 设置全局 用户名
git config --global user.email email 设置邮箱
3、本地分支与远程分支建立关联
git remote add origin github创建的项目的地址,如:(https://github.com/angela-lm/slideshow.git,换成你自己的项目的地址);
git对项目进行操作;
本地仓库与远程仓库关联;
1、git remote -v 查看远程仓库;
2、git remote rename origin newName 远程仓库重命名;
基础工作流
git工作区及文件状态
1、git clone 仓库克隆
2、git add + 有修改的文件的文件名/ . '.' 代表全部提交到暂存区
3、git status 查看当前文件的状态
4、git commit -m ‘...’ 提交到本地仓库,‘...’ 对本次提交进行描述
5、提交内容到远程仓库 git push origin master
版本回退
git reset HEAD^ 回退到上个版本(commit结束);
git reset --soft HEAD^ 回退到这个版本暂存区(add完了但是没有commit)
git reset --mixed HEAD^ 回退到这个版本工作区(还没有add到暂存区)
git reset --hard HEAD^ 回退到这个版本工作区(且工作区没有内容改变);
(HEAD ~ num) 或 (commit ID commit ID 可以在git log git reflog中查看)
差异比较
git diff 比较工作区与暂存区;
git diff --cached 比较暂存区与本地版本库中最近一次commit的内容;
git diff HEAD 比较工作区与本地库中最近一次commit的内容;
git diff <commit ID> <commit ID> 比较两个commit之间的差异;
历史操作
git reflog
分支操作
git branch 查看分支
git branch angela 创建分支angela
git checkout angela 切换分支
git checkout -b 'angela1' 创建angela1分支并切换到该分支
git merge angela1 将anglea1 分支与当前分支进行合并操作;
git push origin master:dev 将本地库中的master 分支推到远端仓库的dev分支(dev没有则新建分支);
文档查询
展示git命令大纲及常用命令
git --help
展示git命令大纲及全部命令列表
git help -a
展示具体命令说明手册
git help <command>