GIT介绍
Git 是一个开源的分布式版本控制软件,用以有效、高速的处理从很小到非常大的项目版本管理。 Git 最初是由Linus Torvalds设计开发的,用于管理Linux内核开发。Git 是根据GNU通用公共许可证版本2的条款分发的自由/免费软件,安装参见:http://git-scm.com/
GitHub是一个基于Git的远程文件托管平台(同GitCafe、BitBucket和GitLab等)。
Git本身完全可以做到版本控制,但其所有内容以及版本记录只能保存在本机,如果想要将文件内容以及版本记录同时保存在远程,则需要结合GitHub来使用。使用场景:
- 无GitHub:在本地 .git 文件夹内维护历时文件
- 有GitHub:在本地 .git 文件夹内维护历时文件,同时也将历时文件托管在远程仓库
其他:
集中式:远程服务器保存所有版本,用户客户端有某个版本
分布式:远程服务器保存所有版本,用户客户端有所有版本
git工作原理
git的工作原理还是比较简单的,当我们创建了本地代码仓库后,会在本地代码仓库的根目录中生成一个.git的隐藏文件。
.git为一个文件目录,又叫做版本库。在本地代码仓库文件夹中,除.git目录之外的所有与.git同级的目录及其子目录都叫做工作区。
工作区(Working Directory):仓库文件夹里出.git目录以外的内容
版本库(Repository):.git目录,用于存储记录版本信息
暂缓区(stage),分支(master):git自动创建的第一个分支
HEAD指针:用户指向当前分支
git add和git commit的原理
git add:把文件修改或者新添加的的文件添加到暂存区
git commit:把暂存区的所有内容提交到当前分支
下图就可以解释git add 和 git commit的原理:
git常用的命令
git init 初始化
git add filename.txt 添加要往远程传的文件到一个临时列表
git commit -m "xxx" # 说明为啥上传
git push origin master # 上传
git clone https://github.com/triaquae/Weibo # 克隆远程的项目
git status 查看修改结果
git log 查看修改过几次
git reflog 查看修改过后所有历史操作
git log --pretty=oneline 查看修改过的所有版本
git reset --hard 加版本 回滚到哪个版本
git reset --hard head^ 回滚到上个版本
git reset --hard head^^ 回滚到上上(回滚到上两个)个版本
git reset HEAD filename.txt 撤回提交到暂存区的操作
git checkout --filename.txt 撤销工作区操作(可以多个文件)
git rm filename.txt 删除暂存区
git checkout -b "dev" 创建分支(引号里是分支名)
git push origin xxx 提交到分支库(xxx表示分支名)
git branch 查看分支
git checkout dev 切换到分支库
git merge dev 合并分支库到主库(dev表示分支库)
git pull 拉远程库的文件
git stash 缓存工作区的内容
git stash list 查看暂存区的内容
git stash apply 把暂存区的内容恢复到工作区
git stash pop 把暂存区的内容恢复到工作区并且把暂存区的删除
版本回退:
git reset --hard HEAD : 回退到当前的版本
git reset --hard HEAD^ : 回退到上一个版本
git reset --hard HEAD^^ : 回退到上上个版本
git reset --hard HEAD~100 : 回退到前100版本
git reset --hard 版本号(前5位)
我们修改或者新添加的文件起初是处于工作区,通过git add命令可以把工作区的文件移动到版本库中的暂缓区(stage)。
处在暂缓区(stage)的代码可以通过git commit -m “提交的注释” 提交到版本库中的分支(master)。
处在分支(master)中的代码可以通过git push命令push到共享版本库。
注意:只有分支中的文件才可以push到共享版本库。