版本控制
一、版本管理的演变
1. 未出现版本控制
用目录拷贝区分不同版本,公共文件容易被覆盖,成员沟通成本高、效率低下
2. 集中式VCS
有集中的版本管理服务器,具备文件版本管理和分支管理的能力,但是客户端必须时刻与服务器相连(本地只有一部分版本,只能通过服务器查询整个项目的情况)。如:CAS、SVN
3. 分布式VCS
服务端和客户端都具有完整的版本库,查看历史版本等操作不需要访问服务器,比集中式VCS更能提高版本管理效率。如:Git等
Git、GitHub、GitLab的区别?
GitHub、GitLab都是基于Web的Git仓库,代码托管平台。Git是版本控制系统,是一种工具,用于代码的版本控制和存储。
相关资料:https://blog.cutepig.net/archives/amp/423
二、Git相关知识
1. Git基础
1.1. Git的安装及配置
- 安装Git,安装好后
git --version
查看git 的版本。 - Git的相关设置:
1 |
|
通过以上命令设置全局用户名和邮箱,复查代码可以通知对应的提交人员
Git的配置范围(默认local,范围越小优先级越高)
git config --local
local:设置在当前仓库有效
git config --global
global:设置在该用户有效
git config --system
system:设置在多用户有效
查看Git的配置
1 |
|
1.2. Git的常用命令
- 创建Git仓库
git init
在当前文件初始化Git仓库
git init 文件夹名
在当前文件夹下创建该文件并初始化Git仓库
- 查看状态
git status
查看文件的状态
- 查看文件之间的差异
git diff --cached xx
查看暂存区的变化
git diff xx
查看当前工作区和暂存区之间的差异
- 提交更新
git add filename
将文件提交到暂存区
git add -u
将已管理并且修改的文件都进行暂存
git commit -m ''
提交暂存区中的文件
- 删除文件
git rm filename
将删除对应的文件暂存到缓冲区(工作目录也会删除对应的文件)
git rm --cached filename
只从暂存区移除,工作区不删除
- 修改文件名
mv filename newFilename
git rm filename
git add newFilename
总结:git mv filename newFilename
- 查看提交历史
git log
按时间顺序列出所有提交,最近的在最上面
git log --online
查看简洁信息(每个提交信息在一行中显示)
git log -n4
只查看前几次提交信息
git log --all
查看所有分支的日志
git log --all --graph
图形化形式查看所有分支的日志
- 提交区操作
git commit --amend
对最近一次提交信息进行修改或者将第二次提交替代第一次提交
git rebase -i parentid
修改以前提交的commit信息,将需要修改的信息修改为 r
git rebase -i parentid
修改以前提交的信息,将需要修改的信息修改为 s
git reset --hard commitid
将之前提交的commit都清除,所有文件回到这个commit提交的内容
- 暂存区操作
git reset head (filename)
清空暂存区,可以指定文件
git checkout filename
将工作区恢复成最近一次提交内容
git chechout commitID
切换到该次提交(头指针分离)
- 远程仓库
git remote -v
显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL
git remote add name url
添加一个新的远程 Git 仓库
git remote rename oldname newname
远程仓库重命名
git remote remove name
删除远程仓库,其相关分支以及配置也会被删除
git fetch remotename branchname
拉取远端分支
git push remotename branch
向远端推送分支
git push <remote> localbranch:refs/for/remotebranch
向远端推送分支(需要进行code review)
git push origin HEAD:refs/for/remotebranch
2. Git分支
使用分支可以把个人工作从开发主线上分离开来,以免影响开发主线。创建分支只是创建了一个可移动的新指针,通过head指针就可以知道当前处于哪个分支上。
- 分支命令
git branch
分支列表
git branch name
创建分支
git branch -D name
删除分支
git checkout (-b) name
切换分支(创建并切换分支)
git branch --merged
查看已合并的分支
git branch --no-merged
查看未合并的分支
- 远程分支
远程分支以 remotename/branch 命名,如 origin/master
git remote show name
查看远程分支信息
git fetch remotename branchname
同步远程分支数据,不写远程仓库默认所有的,不写分支默认远程仓库所有分支
git merge branch
合并冲突
git pull remotename remotebranch:localbranch
从远程仓库拉取数据并合并,省略本地分支则默认当前所在分支
git push remotename localbranch:remotebranch
将数据推送到远程分支上
- 跟踪分支
跟踪分支是与远程分支有直接关系的本地分支。
git checkout -b localbranch remotename/branch
创建跟踪分支(起点在remotename/branch上的分支)
git branch -u remotename/branch
设置跟踪分支
git branch -vv
可查看本地分支跟踪的远程分支
- 删除远程分支
git push <remote> --delete branch
删除远程分支
- 变基
使用 rebase 命令将提交到某一分支上的所有修改都移至另一分支上,这个操作就叫变基。
git rebase branch
以该分支为基底
- 缓存
git stash
将当前改动暂存
git stash list
查看暂存列表
git stash pop
弹出第一个暂存
git stash apply
应用第一个暂存,不会从暂存列表中移除
git stash clear
清除暂存列表
- 禁止行为
git push -f
强制推送
不要对集成分支进行变基
- 实践
git pull origin master:master
git merge --no-ff branchname
git commit --amend
git push origin HEAD:refs/for/master
–no-ff 关闭快进模式,产生一个新的提交
3. GitHub
in:readme
在readme中搜索