git命令及快捷键

git命令

代码仓库类型

Git是一个分布式代码管理工具,与之共存的就是中央式代码管理仓库

中央式:所有的代码保存在中央服务器,所以提交必须依赖网络,并且每次提交都会带入到中央仓库,如果是协同开发可能频繁触发代码合并,进而增加提交的成本和代价。最典型的就是svn
分布式:可以在本地提交,不需要依赖网络,并且会将每次提交自动备份到本地。每个开发者都可以把远程仓库clone一份到本地,并会把提交历史一并拿过来。代表就是Git

git的优势在于本地回退成本更低,更加优雅,用户可能感知不到,

代码文件状态

修改:Git可以感知到工作目录中哪些文件被修改了,然后把修改的文件加入到modified区域
暂存:通过add命令将工作目录中修改的文件提交到暂存区,等候被commit
提交:将暂存区文件commit至Git目录中永久保存

commit节点

Git中每次提交都会生成一个节点,而每个节点都会有一个哈希值作为唯一标示,多次提交会形成一个线性节点链
commit节点链
C2节点包含C1提交内容,同样C3节点包含C1、C2提交内容

head节点

HEAD是Git中非常重要的一个概念,你可以称它为指针或者引用,它可以指向任意一个节点,并且指向的节点始终为当前工作目录,当前工作目录(也就是你所看到的代码)就是HEAD指向的节点
HEAD是可以移动的,通过移动HEAD来获取前几次的提交,同时也指向一个分支,间接指向分支所指向的节点。

分支

分支也是Git中相当重要的一个概念,当一个分支指向一个节点时,当前节点的内容即是该分支的内容,不同的是分支可以存在多个,而HEAD只有一个。通常会根据功能或版本建立不同的分支
分支开发示意
节点分支都只是指向的概念,轻量级,可以基于某分支拉取新分支,本质上不是拷贝代码,而是新分支指向该节点。同样的变动可以合入多个分支。

命令相关

结合3个区域,git命令大致示意如下:
git命令及区域示意

撤销工作区变动:git checkout – 文件名
清空暂存区: git reset HEAD 文件名
创建分支 git branch
切分支 git checkout 分支名, HEAD间接指向当前分支指向的节点
删除分支 git branch -d 分支名
git merge 分支名/节点哈希值,将某个分支或者某个节点的代码合并至当前分支,同一个类的代码修改后会冲突,merge本质将历史分支悬挂在最新分支里
非理想状态下的merge会生成新节点
git rebase 分支名/节点哈希值 合并分支代码
rebase相比于merge提交历史更加线性、干净,使并行的开发流程看起来像串行本地推到远程并对应的是同一条分支可以优先考虑rebase
git cherry-pick 节点哈希值 选择某几个节点合并
cherrypick把c3c4节点抓过来放在后面
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的移动
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 + 上/下 移动行