git命令及快捷键
git命令
代码仓库类型
Git是一个分布式代码管理工具,与之共存的就是中央式代码管理仓库
中央式:所有的代码保存在中央服务器,所以提交必须依赖网络,并且每次提交都会带入到中央仓库,如果是协同开发可能频繁触发代码合并,进而增加提交的成本和代价。最典型的就是svn
分布式:可以在本地提交,不需要依赖网络,并且会将每次提交自动备份到本地。每个开发者都可以把远程仓库clone一份到本地,并会把提交历史一并拿过来。代表就是Git
git的优势在于本地回退成本更低,更加优雅,用户可能感知不到,
代码文件状态
修改:Git可以感知到工作目录中哪些文件被修改了,然后把修改的文件加入到modified区域
暂存:通过add命令将工作目录中修改的文件提交到暂存区,等候被commit
提交:将暂存区文件commit至Git目录中永久保存
commit节点
Git中每次提交都会生成一个节点,而每个节点都会有一个哈希值作为唯一标示,多次提交会形成一个线性节点链
C2节点包含C1提交内容,同样C3节点包含C1、C2提交内容
head节点
HEAD是Git中非常重要的一个概念,你可以称它为指针或者引用,它可以指向任意一个节点,并且指向的节点始终为当前工作目录,当前工作目录(也就是你所看到的代码)就是HEAD指向的节点。
HEAD是可以移动的,通过移动HEAD来获取前几次的提交,同时也指向一个分支,间接指向分支所指向的节点。
分支
分支也是Git中相当重要的一个概念,当一个分支指向一个节点时,当前节点的内容即是该分支的内容,不同的是分支可以存在多个,而HEAD只有一个。通常会根据功能或版本建立不同的分支
节点分支都只是指向的概念,轻量级,可以基于某分支拉取新分支,本质上不是拷贝代码,而是新分支指向该节点。同样的变动可以合入多个分支。
命令相关
结合3个区域,git命令大致示意如下:
撤销工作区变动:git checkout – 文件名
清空暂存区: git reset HEAD 文件名
创建分支 git branch
切分支 git checkout 分支名, HEAD间接指向当前分支指向的节点
删除分支 git branch -d 分支名
git merge 分支名/节点哈希值,将某个分支或者某个节点的代码合并至当前分支,同一个类的代码修改后会冲突,merge本质将历史分支悬挂在最新分支里
git rebase 分支名/节点哈希值 合并分支代码
本地推到远程并对应的是同一条分支可以优先考虑rebase
git cherry-pick 节点哈希值 选择某几个节点合并
git checkout 分支名/HEAD^ 分支前一次提交~N前N次
git reset HEAD~N //回退N个提交 ^1是前一个
git pull本质是fetch+merge,首先更新远程仓库所有状态到本地,随后再进行合并。合并完成后本地分支会指向最新节点,也可以通过rebase进行合并git pull --rebase
git revert 恢复文件到上次提交
reset会把工作区里的所有内容都更新掉,checkout不会去修改你在工作区里修改过的文件,本质上还是checkout对head的移动
git 认证
git clone 有两种方式:ssh、https。前者通过配置公钥在服务端(https://githubfast.com/)进行认证,后者通过账号信息鉴权,但push代码时需要通过服务端产生有时限的token,而不是账号密码,idea使用后者较为顺畅。
提交代码时可以把token直接添加远程仓库链接中,这样就可以避免同一个仓库每次提交代码都要输入token了:
git remote set-url origin https://<**your_token**>@github.com/<**USERNAME**>/<**REPO**>.git
idea快捷键
Alt+Insert 可以新建类,文件,get或set方法,此快捷键又名创造一切
Ctrl+Shift+F 全局查找文件
alt+enter自动解决异常、自动导包
ctrl +shift +T 自动生成try+catch 建议重写双键位alt+t
ctrl +shift + Z 反向撤回
ctrl +shift +r 文件替换
ctrl +shift +U 大小写转换
ctrl + j 查看快捷键
ctrl + alt + <- 返回上一步下钻的位置
ctrl +alt + o 删除无用的import
ctrl + o 重写方法
ctrl + i 实现接口中当前缺失的方法ctrl + h 查看类或接口的继承关系,快速找接口实现类
格式化文件 建议重写双键位alt+s
alt + shift + 上/下 移动行