git
~git是分布式版本控制系统
我来解读一下读完后理解的Git与SVN的主要差别
我觉得这两个工具主要的区别在于历史版本维护的位置
Git本地仓库包含代码库还有历史库,在本地的环境开发就可以记录历史
而SVN的历史库存在于中央仓库,每次对比与提交代码都必须连接到中央仓库才能进行
这样的好处在于:
1、自己可以在脱机环境查看开发的版本历史
2、多人开发时如果充当中央仓库的Git仓库挂了,任何一个开发者的仓库都可以作为中央仓库进行服务
不过开发者仓库一般不直接充当中央库,但你可以随时创建一个新的中央库然后同步就立刻恢复了中央库
*svn本地没有历史版本,(意思是git 的有)。
*git的“中央仓库”跟每个人的仓库是一摸一样的,仅仅用于方便交换修改。断网也能commit。
<<<两个工具主要的区别在于历史版本维护的位置>>>
*中央库的Git仓库挂了,但你可以随时创建一个新的中央库然后同步就立刻恢复了中央库。
*commit要频繁,不然无法记录你的改动
svn的问题是每次commit都必须联网
如果你一天commit一次,中间的修改你找不回来
Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念。
暂存区是Git非常重要的概念,弄明白了暂存区,就弄明白了Git的很多操作到底干了什么。
git add .是把工作区的修改提交到暂存区
git commit只负责把暂存区的修改提交了(无论合适,只是提交暂存区里的东西,而不提交工作区的东西)
指向当前版本的HEAD指针,HEAD指向的版本就是当前版本
用git diff HEAD -- readme.txt命令可以查看工作区和版本库里面最新版本的区别
**git checkout -- file可以丢弃工作区的修改)
(git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令)
**git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区。
git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
【场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。】
【场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。】
要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;
关联后,使用命令git push -u origin master第一次推送master分支的所有内容;
HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场
**本地分支和远程分支的链接关系没有创建用命令:git branch --set-upstream branch-name origin/branch-name
查看远程库信息,使用git remote -v
一定要从自己的账号下clone仓库,这样你才能推送修改
merge :git 会自动根据两个分支的共同祖先 的这个 commit 和两个分支分别的最新提交进行一个三方合并
rebase:git 会从两个分支的共同祖先 开始提取 当前分支上的修改,再将 master 分支指向 目标分支的最新提交(此时是develop分支),然后将刚刚提取的修改应用到这个最新提交后面。(修改接在最新提交后面)