1、概念
- 分布式的版本控制系统
- git跟踪管理的是文件的修改 而非文件。每次修改都需要通过git add 将修改放到暂存区。否则不会commit到仓库
- 快速的分支切换,方便的分支管理
2、命令
- 基本命令
git init 初始化为一个仓库
git add <file> 文件修改添加到暂存区(stage|index)
git commit -m <message> 暂存区内容提交
git status 查看仓库修改状态
git diff <file> 查看文件具体改动
git diff HEAD -- <file> 查看工作区跟版本库最新版本区别
git log |git log --pretty=oneline查看修改记录
git reset --hard HEAD^ 回退到上一个版本
git reset --hard HEAD^^ 回退到上上一个版本
git reset --hard HEAD~100 回退网上100个版本
git reset --hard <上个版本号前几位> 不小心回退 想往前翻 命令行窗口未关之前有效 所以回退之前保留版本号很重要
git reflog 记录每一次命令 有版本号哦
git checkout -- <file> 将文件恢复到最近一次commit或者add状态
git reset HEAD <file> 可以把暂存区修改撤销掉
git rm <file> 从版本库中删除文件
- 远程命令
git remote add origin git@github.com:qinglang_liusong@126.com/learngit.git 本地仓库与远程仓库关联
git remote remove origin 取消本地仓库与远程仓库关联
git clone git@github.com:liusong12345/activemq.git 从远程仓库克隆到本地
git push -u origin master 将本地内容推送到远程仓库(推送的是master分支)
- 分支命令
git branch 列出所有分支 当前分支前面标*
git checkout -b <name> 创建分支(name)命令 -b表示创建并快速切换
git checkout <branchname> 切换分支
git merge <bname> 合并bname分支内容到当前分支
git branch -d <bname> 删除bname分支
git merge --no-ff -m "提交描述" <bname> 采用--no-ff 方式合并分支 默认为Fast forward(删除分支后丢失分支信息)。
合并分支时,加上--no-ff
参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward
合并就看不出来曾经做过合并
git stash 不想提交且需要在别的分之上工作 可以先发分支工作状态储存起来
git stash apply 恢复后,stash内容并不删除
git stash pop 恢复的同时把stash内容也删
- 标签
git tag v1.0 给当前分支当前head打标签v1.0
git tag v1.0 commitid 给当前分支commitid操作节点打标签v1.0
git tag -a v1.0 -m "描述" commitid 给当前分支commitid操作节点打标签v1.0并写上描述
git show v1.0 查看v1.0标签详情
git tag 查看所有标签
3、实际开发分支应用情景
在A分之上创建分支B 就像是复制一份A分支上的代码。在此基础上修改
在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master
分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev
分支上,也就是说,dev
分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev
分支合并到master
上,在master
分支发布1.0版本;
你和你的小伙伴们每个人都在dev
分支上干活,每个人都有自己的分支,时不时地往dev
分支上合并就可以了。
所以,团队合作的分支看起来就像这样: