目录
基本概念:
add之前是工作区,add之后是暂存区,commit之后是本地仓库
pull拉取远程仓库,push 推送到远程仓库
初始化仓库:
$git init 初始化一个目录,并创建一个.git目录
提交代码:
$git add <filename>,把修改文件添加到暂存区
$git commit -m '提交日志信息' 把暂存区的内容提交到本地仓库
$git commit -a -m '信息' 上面两步一起执行, 只对已在分支上的文件有效
查看创库变化:
$git status 查看仓库状态
$git diff <filename> 查看未提交修改,
$git diff HEAD --<filename> 查看工作区与版本库的所有修改
$git log 查看提交日志 $ git log --pretty=oneline 单行显示
版本回退和前进:
$git reset --hard <版本号> ,如果是HEAD^ 回退一步,也可以回退多步HEAD~100
$git reflog 查看历史操作,可以得到被回退得版本号 是git log办不到得
丢掉修改:
$git checkout -- <filename> 可一丢掉工作区得修改 。撤销该文件得最后一次工作区操作
如果要丢带暂存区 必须先 git reset HEAD <filrname> 回退add操作,再执行checkout操作
如果已经commit,那就只有进行版本回退了
文件删除:
方式一:手动删除然后 git add 就行了
方式二:直接$git rm <filrname> 就行
两种方式都需要commit操作,才能提交到本地仓库
远程仓库:
$ssh-keygen -t rsa -C "email" 创建SHH Key 密钥, 在用户目录会生成.shh目录,需要使用是id_rsa.pub文件的公钥
$git clone <仓库地址> 克隆远程仓库到当前目录
$git remote add origin <仓库地址> 本地仓库与远程仓库关联
$git push -u origin master 推送本地仓库到远程,第一次要使用 -u
地址使用区别,git协议比https协议快
创建合并分支:
$git pull origin dev 拉去远程dev分支并切换过去
$git checkout -b branch-name origin/branch-name
$git branch 参看分支 当前分支会带*
$git branch dev 创建dev分支
$git push origin dev 第一次提交本地创建的分支
$git checkout -b dev 创建dev分支并切换到dev
$git checkout master 切换到master分支
$git switch -c dev 创建dev分支并切换到dev switch 2.23版之后才有 使用git --version 查看版本
$git switch master 切换到master分支
$git merge dev 把dev分支合并到当前分支
$git branch -d dev 删除本地dev分支
$git push origin --delete test 删除远程test分支
$git rebase 把本地未铺设的分叉提交历史整理成直线
解决冲突:
解决思路,修改冲突文件保留自己需要的
$git add 提交修改
$git commit -m '提交信息'
Bug分支(工作现场):
$git stash 保存工作区并隐藏,为了不营销切换分支
$git stash list 查看工作现场
$git stash apply stash@{0} 恢复工作现场
$git stash drop 删除stash
$git stash pop 恢复工作现场并 删除stash
多人协作:
$git remote -v 查看远程库信息 网址
$git push origin <name> 推送指定分支到远程
多人协作处理冲突思路:
1.git pull 拉下代码 正常处理冲突
2.任何再push (如果命令失败根据提示执行命令)
标签管理:
$git tag <name> [commitid] 创建新标签 标签是打在commit节点上 和分支无关; 用-a
指定标签名,-m
指定说明文字
$git tag -a v0.1 -m "version 0.1 released" 1094adb
$git tag 查看tag
$git show <tagname> 查看tag描述
$git tag -d <name> 删除tag
$git push origin <tagname> 推送tag到远程
$git push origin --tags 推送全部
$git push origin :refs/tags/tagname 删除远程tag
.gitignore配置规则
在仓库根目录下新建该文件
配置语法(pattern规则)
- 以 / 开头表示根目录,防止递归
- 以 / 结尾表示指定目录
- 以 ! 开头表示不过滤(跟踪)此项配置匹配到的文件或目录
- 以 # 开头表示注释,如需转义在前面加斜杠,/#
- 配置规则可以使用标准的glob模式匹配(glob模式是指shell所使用的简化了的正则表达式)
- * 通配符,多字符通配
- **表示匹配任意中间目录如,a/**/z 表示可以匹配a/z、a/s/z或 a/a/s/z 等
- ? 通配符,单字符通配
- [] 可以匹配任何一个在方括号中的字符, 如*.[ac] 表示匹配任何以 .a 或者 .c 结尾的文件,如果[]中有短划线 - 分割两个字符,则表示所有两个字符范围内的都可以匹配如 [0-9]