分布式的版本控制系统
此文档为简单版想看详细GIT请到 coder-pig | 阮一峰
如有不足请包涵
安装完Git后第一件要做的事,设置用户信息(global可换成local在单独项目生效):
git config --global user.name "用户名" # 设置用户名
git config --global user.email "用户邮箱" #设置邮箱
创建仓库
先创建一个文件夹在cmd进入该文件夹,初始化仓库
git init
注意看不到 .git文件需要打开显示隐藏文件夹,只供观看以免操作到该文件产生问题,看完后隐藏避免操作到该文件夹
核心框架
三个部分:
- 工作目录:本地目录(你创建的文件夹)
- 暂存区域:准备提交到仓库的内容
- Git仓库:从暂存区域,提交到Git仓库的内容
流程:
在工作目录中添加修改文件 ==>将需要提交的文件,放入暂存区域 ==>将暂存区域的文件提交到git仓库
将文件提交到暂存区域
git add 文件名 #文件夹加/
git add --all 或者 add . #将所有文件保存到暂存区
将暂存区域文件提交到Git仓库
注意必须写注释
git commit -m "注释信息"
取消暂存
git restore --staged 文件名
Git 状态
git status
on branch master (默认分支master)
nothing to commit. workingtree clean 没有提交的目录
Changes to be committed 有一些改变没有去提交
在创建新的文件时没有提交到Git仓库 使用该命令时会报错(或者提交到暂存没有提交到仓库),需要提交到暂存区域在从暂存区域(或者已经提交到暂存)提交到git仓库
如果提交到暂存区后再对文件进行修改时,需要重新提交到暂存区。不然提交到Git仓库的会是暂存区(旧版本)的内容而不是你修改文件(新版本)后的内容
本地内容(修改后新内容)和暂存(旧内容)相当于二个不同的区域,只有当二个区域的内容相同提交到Git仓库的内容才会是更新的内容
回滚版本 每次提交(本地=>暂存=>仓库)就相当于是一个版本
git log #版本查询(日志)
git reset #指定版本 也可以进行版本号方式回滚需要输入前6位就可以了
>#将git仓库与暂存区域回滚到了指定版本,并未修改本地目录(目录下的内容(文件))
git reset --soft HEAD~1 #指定版本
>#只是将你的git仓库内容回滚到了指定版本,需要从新提交暂存
git reset --hard 版本号 #指定版本
>#将本地、暂存、git仓库都回滚到指定版本
commit的版本号,可以写HEAD
版本的表示:HEAD
git reset HEAD~1 #回滚到上一个版本 1表示往上一个版本 2以此类推
重命名文件
原文件 ==>重命名文件
直接对文件进行修改 git检测就会以为你
- 删除了文件原文件
- 新增了文件
如果需要修改文件名
git mv 旧文件名 新文件名 #需要提交commit
删除文件
git rm 文件名 #并没有对你的删除进行提交需要commit 在为提交前都可以进行回滚
恢复文件
git restore --stage 文件名 #恢复的是暂存区域的文件
git restore 文件名
日志
git log #版本查询(日志)当前分支
git log --oneline --decorate --graph --all #可以查看到精简版的日志与分支信息(版本号7位、所属分支、注释)
查看
git show 提交id # 查看某次commit的修改内容
git diff 文件名 #查看修改内容
git rev-parse 分支名 # 查看分支commit的版本号,可以写HEAD
标签
Git 中的tag指向一次commit的id,通常用来给开发分支做一个标记,如标记一个版本号。
git tag 标签名 #例如 版本号(v1.0)默认为HEAD也可以指定一个commit id
git tag -a 标签名 -m "描述"
git tag #查询所有标签
git show 标签名 #查询该标签信息
git reset --hard 标签名 #版本回退
git tag -d #删除标签
git checkout 标签名 #切换到指定tag
>远程
#通常的git push不会将标签对象提交到git服务器,我们需要进行显式的操作:
git push origin 标签名 # 提交指定标签到git服务器
git push origin –tags # 将本地所有标签一次性提交到git服务器
git push origin :refs/tags/标签名 #删除远程标签
git push origin --delete tag 标签名 #删除远程标签
git fetch origin tag 标签名 #获取远程版本
git分支
创建分支
git branch 分支名
查询当前所有分支
git branch -a # *号表示你当前所在的分支
切换分支
git checkout 分支名
合并分支
git merge 分支名
在a分支文件修改内容然后切换b分支修改内容合并时会发生冲突需要手动合并,在提交到暂存在到仓库,不会对b分支有任何操作,只是把b分支内容合并到a分支
并没有想象的那么智能
在文件名 大小 一致 可能没有办法判断你是否修改了
还有二进制文件 word excel 图片 视频等
删除分支
git branch -d 分支名 # 删除分支,分支上有未提交更改是不能删除的
git branch -D 分支名 # 强行删除分支,尽管这个分支上有未提交的更改
恢复误删分支
git log --branches="被删除的分支名" # 找到被删分支最新的commitb版本号
git branch 分支名 版本号(前七位即可) # 恢复被删分支
分支重命名
git branch -m 老分支名 新分支名
命令别名
git config --global alias.别名 原命令(如status)
远程
创建ssh
ssh-keygen -t rsa -C "你的设置邮箱地址" #注册登录上 把.ssh文件id_rsa.pub内容复制到SSH创建key
在本地使用如下命令:
git remote add origin http或者ssh地址 #链接到远程仓库
本地推送到远程仓库
git push -u origin 分支名 #确认链接选yes(注意不要只写y) 第二次该命令操作可无需在加 -u
推送到远程仓库后,添加新的本地内容后提交到git仓库后在次 git push origin 分支名即可
clone(克隆)
创建一个文件夹cmd 或者 Git Bash 输入以下命令:
git clone 远程仓库地址 # 克隆项目到当前文件夹下
git clone 远程仓库地址 目录名 # 克隆项目到特定目录下
克隆后必须进入到你克隆下来了的文件夹才能使用Git命令,因为你创建的文件夹并没有 .git 包,进入克隆的文件夹自带.git包(可以打开隐藏文件夹进行查看)
当然你也可以不用创建文件夹进行克隆减少进入子文件夹
克隆后在远程仓库添加新的内容(注意添加文件记加后缀
)用以下命令:
获取克隆后最新的内容
git pull origin 分支名 #同步远程仓库的更新
git push –u origin 分支名 –f #强制推送
查看
git branch -r # 查看远程所有分支
git pull origin 分支名 --allow-unrelated-histories #在推送时候报错查看原因
cat .git/config #进入git的配置文件所在,打开.git/config配置文件
git config --list #查看当前的config配置
删除远程分支
git push origin :分支名
git push origin --delete 分支名
重命名远程分支 先删除远程分支,然后重命名本地分支,接着再Push到远程仓库
多人协作:
这里仅总结一下多人协作时,哪些分支需要推送,哪些分支不需要推送。
-般来讲,遵循以下的规则: .
●master: 该分支是主分支,因此要时刻与远程同步。
●dev:该分支是开发分支,团队所有成员都需要在.上面工作,所以也需要与远程同步。
●bug: 该分支只用于在本地修复bug, 就没必要推到远程了,除非老板要看看你每周到底复了几个bug。
●feature: 该分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
总之,就是在Git中,分支完全可以在本地自己藏着玩,是否推送,视你的心情而定!