1,简介

命令中有  -  和  --  (一般 '-' 为常用的,'--' 为可选的)
组成(三棵树)(快照)

Working Directory            Stage(Index)            Respository

2,git常用命令

用户创建:

git config --global  "lwc"            git用户名
git config --global user.email "lwc"           git邮箱

常用操作:

git config --list            查看git配置
git init                     创建一个空的git仓库
git add 文件名                添加到暂存区
git reset HEAD 文件名         从暂存区撤销(不指定文件名会将最后一次提交全部撤销) 
git commit -m/am "提交说明"   提交到本地仓库(m/am(add+commit -m 新文件除外))
git status                   查看状态
git add 文件名                               添加到暂存区("."代表所有)
git checkout 文件名                          会把暂存区的覆盖掉修改后的(危险)(空格)--防止与分支重名
git log                                     提交日志(时间由近到远)
git log --decorate                          指向提交的所有引用
git log --decorate --oneline                指向提交的所有引用的精简显示
git log --decorate --oneline --graph --all  指向提交的所有引用的精简显示的图像显示的搜所有分支
git reflog --date=[iso | local | relative] | grep [-w 全词匹配] <branchname>
[iso:格式化后的时间时间local:实际时间relative:相对时间, 多少天之前]

返回历史版本(reset 命令):

git reset --mixed HEAD~               返回上一个快照(mixed为默认,一下不写)
git reset HEAD~~                      返回上上一个快照(以此类推)
git reset HEAD~10                     防止错误支持数字(此处相当于10个~)

调用git reset --mixed HEAD~之后实际上它影响了两颗树
1.移动HEAD 指向,使其指向上一个快照
2.将HEAD移动后指向的快照回滚到暂存区(暂存区上一个版本)(HEAD在此) 

调用 git reset --soft HEAD~之后实际上它影响了一颗树
1.移动HEAD 指向,使其指向上一个快照(暂存区仍然是最新的)

调用 git reset --hard HEAD~之后实际上它影响了三颗树
1.移动HEAD 指向,使其指向上一个快照
2.将HEAD移动后指向的快照回滚到暂存区(暂存区上一个版本)
3.将暂存区的文件还原到工作目录(工作目录上一个版本)(HEAD在此)

git reset 快照的id                 根据id回滚(可以模糊查询)
git reset 版本快照 文件名/文件路径   回滚指定文件(HEAD指针不会变)

比较

git diff                         比较暂存区个工作目录
git diff 快照id1 快照id2          比较历史两个快照
git diff 快照id                  比较工作目录和git仓库快照
git diff --cached [快照id]       比较暂存区和仓库的快照(id不加为当前)

修改最后一次提交

git commit --amend                              修改提交说明(编辑) 
git commit --amend -m "新的说明"                修改提交说明 
git rm 文件名                                   删除工作区和暂存区的文件(仓库还会存在(reset --soft))
git rm -f 文件名                                强制删除工作区和暂存区的文件(暂存区和工作空间不一致会无法删除)
git rm --cached 文件名                          删除暂存区
git mv 旧的文件名 新的文件名                      重命名文件

分支

git branch                                     查看分支
git branch 分支名                              创建分支 
git checkout 分支名                            切换分支
git checkout -b 分支名                         创建+切换分支   
git merge 分支名                               合并某分支到当前分支
git branch -d 分支名                           删除分支
git checkout HEAD~                             创建一个匿名分支(切换其他分支失效,实验用)将上一个快照拷贝暂存和工作区

checkout 命令

1.从历史目录快照(或暂存区拷贝文件) 到工作区
2.切换分支
git checkout 快照id                           将快照拷贝暂存和工作区

远程仓库

git clone url             从远程仓库克隆项目
git remote -v             显示对应的克隆地址
git remote add origin url 添加显示对应的克隆地址
git push -u origin master 推送
git remote rm origin      删除
git remote set-url origin url 修改
git pull                  拉取

仓库迁移

git clone --bare git://xx.xx.xx.xx/project_name.git
git push --mirror git@code.aliyuan.com/path/new_project_name.git

合并

//这个往上的将会被合并,本身不受影响
git reset --hard commitid
git merge --squash HEAD@{1}
git commit -m "feature B complete"

恢复

git reflog --date=iso
git checkout -b recovery_branch_name commitid
git push  origin recovery_branch_name 

只写了一些工作学习中常用的命令,其余的日后补充。