Git管理代码的架构###
Git采用分布式管理控制系统,没有中央服务器,每个人的电脑上都有一个完整的版本库,不需要联网就可以工作,只需要将各自的修改推送给对方(有一台充当“中央服务器”的电脑,为了方便交换修改。)
特点:不需要联网,安全性高,速度快
而相比于Git,CVS/SVN都采用集中式版本控制系统,每次需要从中央服务器获取最新的版本,干完活后再把更新后的版本推送到中央服务器,因此每次工作必须联网,且工作效率受到带宽的限制。
特点:需要联网,安全性低,速度慢
Git常用命令###
- 创建版本库
- mkdir learngit
- cd learngit
- git init
- 添加文件(文件放在learngit目录或其子目录下)
- git add readme.txt (进暂存区)
- git commit -m "description" (进分支)注意每次commit最好写上描述方便以后知道每个版本的含义
- 随时掌握工作区的状态
- git status
- 查看修改了什么内容
- git diff readme.txt
- 修改后提交
- git add readme.txt
- git commit -m "description"
- 查看历史版本
- git log --pretty=oneline
- 回到上一版本
- git reset --hard HEAD^
- 去到任意版本
- git reset --hard commit-id
- 查看历史操作
- git reflog
- 撤销修改
- git checkout -- file 到上一次add或commit的版本
- git reset HEAD file 撤回到到工作区 git checkout -- file 丢弃修改
- 删除
- git rm test.txt
- git commit
- 将本地库与远程库关联
- git remote add origin git@github.com:server-name/learngit.git
- 推送修改
- git push -u origin master(第一次) 将本地的推送到远程库
- git push origin master
- 克隆仓库
- git clone
- 从远程抓取分支
- git pull
- git pull
- 创建并切换分支
- git checkout -b dev
- 查看分支合并情况
- git log --graph --pretty=oneline --abbrev-commit
- 查看分支
- git branch
- 合并指定分支到当前分支(得先切换到合并分支)
- git merge dev
- 删除分支
- git branch -d dev
- 多人协作:
常见问题汇总###
- 回退到之前版本后再次提交需要注意,若直接提交将会脱离之前的轨迹,别人在此分支上也找不到之后提交的版本,应该新建一个分支提交后将之前的分支合并到新分支上,解决冲突后再提交,最后删除原来分支,这样既保留了原来的版本,也将新版本和原版本都合并到了一个分支上。
- merge和rebase的区别
若远程分支和本地分支各有两次最新的提交
- merge:将两个分支上的东西合并,结果看起来像一个新的“合并的提交”。
- rebase:先将mywork中的每个提交都取消,并将它们临时保存为补丁(放在".git/rebase"目录中),然后把mywork分支更新为最新的origin分支,最后把保存的这些补丁应用到mywork分支上。
- 当mywork分支更新以后,它会指向新创建的提交,老的提交会被丢弃,如果运行垃圾收集命令,这些被丢弃的提交就会被删除。
- 当我们使用Git log来参看commit时,其commit的顺序也有所不同。
- 假设C3提交于9:00AM,C5提交于10:00AM,C4提交于11:00AM,C6提交于12:00AM
- 对于使用git merge来合并所看到的commit的顺序(从新到旧)是:C7,C6,C4,C5,C3,C2,C1
- 对于使用git rebase来合并所看到的commit的顺序(从新到旧)是:C7,C6,C5,C4,C3,C2,C1
- merge:将两个分支上的东西合并,结果看起来像一个新的“合并的提交”。