据说这是现在最好用的版本管理器(没有之一),据说是由Linus花了2周时间完成的(有时在想一个程序员怎样才能叫大牛,可能这就是吧)。
Git :分布式管理,运行速度快,强大的分支管理,这些都是svn没有的,下面总结一下git常用的命令和安装过程供参考。
安装:
下载:https://git-scm.com/downloads
windows环境下,下载好安装包之后一路next安装好就可以了,找到 Git Bash 这就是git的命令行窗口,假装已经安装好了,然后需要配置,因为Git是分布式的每个机器都到有自己相应的名称。
git config --global user.name 'name'
git config --global user.email 'email'
global的意思是所有的git仓库都用以上的name 和email
创建一个版本库
找到一个适当的目录创建一个新的文件夹,进入到里面去运行 git init命令,如下图
这样blog文件夹就是一个git仓库
git add xxx.xx 将修改的文件推送到git的暂存区
git commit -m '这里填写修改的注释' 这里是将暂存区的全部内容提交到仓库
可以git add多次然后依次commit
两个概念工作区,版本库和暂存区
工作区:就是我们电脑中能看到的目录,如blog文件夹
版本库:前面提到的在blog文件夹里运行了git init 命令,这样就初始化了一个版本库,其实在工作区也就是blog文件夹里就有一个.git文件我们看不到,这个文件就是版本库
版本库里的东西可不少,最重要的就是stage就是暂存区,还有一个master 的分支,还有一个HEAD指针,指向master分支
每当运行git add指令时 就把文件添加到暂存区,git commit才添加到版本库
master是git 自动创建的一个分支
git log 按时间由近及远显示最近本仓库此分支的提交
git reset reset --hard HEAD 回到该分支最后提交仓库的状态(HEAD其实是一个指针)
git reset --hard commit_id 回到commit_id状态(可以回到过去,也可以回到未来)
git log --pretty=oneline git返回简易版的log提交日志
git reflog 指令用于返回每一次的命令,还有每一次的commit_id,用于切换版本
git diff HEAD -- "文件名称" 可以查看工作区和版本库里最新版本的区别
git checkout --file 直接丢弃工作区的修改(前提是没有add到暂存区)
git reset HEAD file :如果已经add到暂存区则用这条命令和上一条命令
rm xxx.xx :删除指定文件
git status 查询当前工作区的状态
git checkout -- test.txt 当误删某个文件时,此命令用于恢复当前仓库中最新版本(前提示没有在仓库中删除)
git rm 在仓库中删除
远程仓库
github是一个神奇的网站,它可以提供我们免费的git 服务器
由于git 使用ssh协议加密传输,如果在用户目录下没有找到id_rsa和id_rsa.pub这两个文件则需要手动生成
ssh-keygen -t rsa -C 'youremail'
登录 github 在这里吧刚刚生成的id_rsa.pub粘贴到这里就可以了
添加远程仓库:首先要现在github上添加一个自己的仓库,添加完成后在git中运行如下命令:
git remote add origin git@github.com:你的github账户/learngit.git
这样就把你的
仓库与github上的远程仓库关联起来了
git push -u origin master 是将本地的仓库的内容推送到远程仓库,第一次推送需要 加 -u 以后就不用了
git clone 克隆一个远程库
分支管理
默认情况下一个仓库初始化时有一个master分支
git checkout -b dev 创建并切换到dev分支
git branch dev 创建分支
git merge dev 合并分支
git branch -d dev 合并完之后就可以删除分支
git log --grap --pretty=oneline -addrev-commit 查看分支合并情况
git remote -v 查看远程服务器名称
git push origin dev 推送dev 分支到远程服务器
git pull 从远程服务器拉取工程
git checkout -b dev origin/dev 关联远程的dev分支到本地
git tag vXX 创建版本标签
git tag 查看标签
git tag -d v0.1 删除标签
git push origin :refs/tags/v0.9 远程分支