git 常用命令
创建版本库
1 2
| git clone https://gitee.com/fengzhaoy/mypro.git #克隆git项目到本地 默认master分支 git init #初始化本地版本库
|
修改和提交
1 2 3 4 5
| git status #查看文件状态,列出当前目录没有被git管理,以及被修改过还未提交的文件 git add . #将提交的文件添加到索引库中(添加到缓冲区),*可以是路径也可以是.符号, git add . 代表将当前目录下的所有文件都添加到索引库中,如果指定路径则代表将制定路径的文件添加到索引库中。 git rm -rf <file> #删除本地指定文件 git commit -m 'fix' #提交到本地仓库并加注释 这一步仅仅是放在缓冲区中,还未真正提交到远程
|
查看提交历史
1 2 3
| git log #查看提交历史 git log -p <file> #查看指定文件的提交历史 git blame <file> #以列表方式查看指定文件的提交历史
|
撤销修改
1 2 3 4 5
| git reset --hard HEAD #还原本地未提交的更改 git checkout . #本地所有修改的。没有的提交的,都返回到原来的状态 git checkout HEAD <file> #撤消指定文件的未提交文件的修改内容 git revert <COMMIT> #撤消指定的提交 当用 revert 撤销改动时,它会产生新的提交。 git stash #把所有没有提交的修改暂存到stash里面。可用git stash pop回复。
|
分支与标签
1 2 3 4 5 6 7 8 9 10
| git checkout <branch/tag> #切换到指定分支或标签 git checkout -b <branch> #创建分支 git branch #显示所有本地分支 git branch <new-branch> #创建新分支 git branch -d <branch> #删除本地分支 git branch the_branch_backup #备份一下这个分支当前的情况
git tag #列出所有本地标签 git tag <tagname> #基于最新提交创建标签 git tag -d <tagname> #删除标签
|
合并与衍合
1 2
| git merge <branch> #当前分支合并其他分支 git rebase <branch> #衍合指定分支到当前分支
|
远程操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| git pull #拉取远程所有分支代码合并到本地 git pull origin <branch> #更新当前分支的代码,获取最新的代码 如:git pull origin dev
git push origin <branch> #上传代码及快速合并到远程branch仓库 如:git push origin dev git push origin :<branch/tag-name> #删除远程分支或标签 git push --tags #上传所有标签
#git fetch用法: cat .git/FETCH_HEAD #查看FETCH_HEAD内容 git fetch origin master:tmp #在本地新建一个temp分支,并将远程origin仓库的master分支代码下载到本地temp分支 git diff tmp #比较本地代码与刚刚从远程下载下来的代码的区别 git fetch <remote> #从远程库获取代码
git remote -v #查看远程版本库信息 git remote show <remote> #查看指定远程版本信息 git remote add <remote> <url> #添加远程版本库
|
全局配置
1 2
| git config --global user.name '杨' #设置用户名 git config --global user.email 'zhaoyang10@163.com' #设置邮箱
|
代码回滚
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 代码库回滚: 指的是将代码库某分支退回到以前的某个commit id 本地代码库回滚: git reset --hard commit-id #回滚到commit-id,讲commit-id之后提交的commit都去除 git reset --hard HEAD~3 #将最近3次的提交回滚
远程代码库回滚: 这个是重点要说的内容,远程比本地回滚要复杂 应用场景:自动部署系统发布后发现问题,需要回滚到某一个commit,再重新发布 原理:先将本地分支退回到某个commit,删除远程分支,再重新push本地分支 操作步骤: 1、git checkout the_branch 2、git pull 3、git branch the_branch_backup #备份一下这个分支当前的情况 4、git reset --hard the_commit_id #把the_branch本地回滚到the_commit_id 5、git push origin :the_branch #删除远程 the_branch 6、git push origin the_branch #用回滚后的本地分支重新建立远程分支 7、git push origin :the_branch_backup #如果前面都成功了,删除这个备份分支
|
重命名分支名
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 假设分支名称为oldName 想要修改为 newName 一、 本地分支重命名(还没有推送到远程) git branch -m oldName newName
二.、远程分支重命名 (已经推送远程-假设本地分支和远程对应分支名称相同) a. 重命名远程分支对应的本地分支 git branch -m oldName newName b. 删除远程分支 git push --delete origin oldName c. 上传新命名的本地分支 git push origin newName d.把修改后的本地分支与远程分支关联 git branch --set-upstream-to origin/newName
|
拉取远程分支到本地
1 2 3 4 5 6 7 8 9 10 11 12
| 一、查看所有远程分支 git branch -r 二、拉取远程分支并创建本地分支 方法一 git checkout -b 本地分支名x origin/远程分支名x 使用该方式会在本地新建分支x,并自动切换到该本地分支x。 采用此种方法建立的本地分支会和远程分支建立映射关系。
方式二 git fetch origin 远程分支名x:本地分支名x 使用该方式会在本地新建分支x,但是不会自动切换到该本地分支x,需要手动checkout。 采用此种方法建立的本地分支不会和远程分支建立映射关系。
|
分支合并
1 2 3 4 5 6 7 8 9 10
| 假设有一分支dev 是团队共同开发的代码分支 你为了开发一新功能,通过dev分支新建了一个分支叫job分支,你在job分支上把新功能开发完成。 但是因为团队成员在不断提交dev分支,当你要把job分支功能合并到dev分支,则需要先切换到dev分支 git merge job 解决冲突 然后提交到本地git git add .;git commit -m '合并job分支开发完成功能' 切换到job分支,再把dev分支mege到job分支 git checkout job git merge dev git push origin job #这样就可以保证job分支是最新代码,同时也不影响到dev分支。
|
git 提交规范
公式:
1
| <type>(<scope>): <subject>
|
type 用于说明 commit 的类别,只允许使用下面 7 个标识。
1 2 3 4 5 6 7
| feat:新功能(feature) fix:修补bug docs:文档(documentation) style: 格式(不影响代码运行的变动) refactor:重构(即不是新增功能,也不是修改bug的代码变动) test:增加测试 chore:构建过程或辅助工具的变动
|
scope 用于说明 commit 影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同。
subject 是 commit 目的的简短描述,不超过 50 个字符。
1 2 3
| 1. 以动词开头,使用第一人称现在时,比如change,而不是changed或changes 2. 第一个字母小写 3. 结尾不加句号(.)
|
参考:http://blog.didispace.com/git-commit-specification/
git 常用技巧
https://github.com/521xueweihan/git-tips
git fork 仓库保持同步
参考:https://juejin.im/post/5c82181af265da2da835a3e5
git 各种情况的版本回退
参考:http://blog.csdn.net/fuchaosz/article/details/52170105
git 原理
参考:https://github.com/ZXZxin/ZXBlog/blob/master/%E5%B7%A5%E5%85%B7/Git/Git_1_%E5%9F%BA%E7%A1%80%E5%92%8C%E5%85%A5%E9%97%A8.md