1)恢复文件
git checkout -- filename 用暂存区的文件覆盖工作区的文件,git checkout -- . 没有
git checkout branch -- filename 用branch分支中的文件filename覆盖暂存区和工作区的文件 :没有commit
git checkou 汇总t 显示工作区、暂存区和HEAD区的差别
add git reset --hard HEAD 放弃工作区和暂存区修改
git reset --soft HEAD
git reset (--mixed) HEAD 放弃暂存区修改
git reset --hard HEAD~n(提交id)将工作区、暂存区和HEAD区恢复到上n次提交,不会产生冲突
2)历史
git log 查看历史提交
git relog查看历史命令
git branch 查看本地分支
git branch -a 查看远程分支
3)git冲突
场景:本地的修改未提交,下拉服务器端代码出现冲突:
a)暂存本地的修改
git stash 保存当前未提交的内容(工作区、暂存区)到git栈中,工作区恢复到上一次提交的版本
git pull
git stash pop
git diff : working tree 和 index file
git diff HEAD: working tree 和 commit
git diff --cached: index file 和 commit
b)放弃本地的修改
git reset --hard HEAD
git pull
4)删除
git branch -r -d origin/branch-name 删除本地对远程分支的track
git push origin (空格):branch-name 将一个空分支推送到远程
5) 拉取带有module的分支
一、git clone --recursive git@git****;(git submodule add git@git***)
增加 .gitmodule文件,记录git文件目录以及在当前工程下的存储路径
二、git submodule init
在.git/config目录下注册submodule信息(第一次拉取module是运行)
三、git submodule update
更新module信息(远程有新的更新或者切换分支时调用)
git submodule update只适用于当工程中.git/index中的快照改变时,根据当前的指向(commit id)更新module代码;若模块有更新,但是工程中的快照没有改变,使用git submodule update并不能更新子module。此时:
1/ cd 子模块,主动拉取代码
2/ 进入主工程,git diff/git status发现工程快照检测到子模块有更新,提交相关代码到仓库
3/工程快照发生改变,使用git submodule update更新子模块代码
6) 删除子模块
一、$ git rm --cached [path]
二、编辑.gitmodules
文件,将子模块的相关配置节点删除掉
三、编辑.git/config
文件,将子模块的相关配置节点删除掉
四、手动删除子模块残留的目录
7)detached HEAD
参考:http://www.jianshu.com/p/ae4857d2f868
游离head 和 分支是两个相对独立的概念,互不影响