2

1. 撤销本地未提交commit

场景描述:

1、本地修改了一堆文件
2、git add / git commit 很高兴的将代码提交到本地仓库了
3、打算git push的时候,发现不小心添加了不想要提交的文件
4、查看git log已经产生了一条git commit记录
5、接下来就开始撤销

开始撤销commit记录

git log 查看当前分支的历史记录
2、找到你想恢复到的ID,然后 git reset --soft  ID  
3、这样就恢复到了提交之前的状态。被修改提交的文件会被存放在暂存区中。

git reset 指令

git reset(--mixed) HEAD~1  head树回到上个版本,index树也回到上个版本
回退一个版本,会将暂存区的内容和本地已提交的内容全部恢复到未暂存的状态。

git reset --hard HEAD~1  三棵树都回到上个版本
回退一个版本,清空暂存区,将已提交的内容的版本恢复到本地,本地的文件也将被恢复的版本替换

git reset --soft HEAD~1  head树回到上个版本
回退一个版本,不清空暂存区,将已提交的内容恢复到暂存区,不影响原来本地的文件(未提交的也不受影响)


HEAD~1 回退到上个版本
HEAD~3 回退到前三个版本(指向父节点的指针移动三次)

2. git commit后发现msg写错或者少了提交几个文件

场景描述:

1、本地修改了一堆文件
2、git add / git commit 很高兴的将代码提交到本地仓库了
3、打算git push的时候,发现有部分代码未提交/msg写的不优雅

处理

1、把新的文件添加到暂存区
2、git commit的时候勾选Amend
3、填写新的msg 然后commit
4、查看git log 发现只有新的这一次commit

3、当前分支工作一半,需要切换的新的分支进行工作

1. git stash 暂存区的文件贮藏起来
2. 切换分支
3. 处理完新分支后回到之前的分支
4. git stash apply 将贮藏的文件重新应用
5. git stash drop 0 移除刚刚贮藏的文件

git stash 相关指令

git stash list 显示队列
git stash apply [index] 将指定的贮藏的文件重新应用
git stash drop [index] 移除指定贮藏的文件

4、 创建新分支,从指定拉取代码

1.创建新分支,一般从mater拉取
2.git pull  origin  [branchName]
3.push到新分支

5、reset 的原理

http://git-scm.com/book/zh/v2...

6、合并某个分支上的指定commit

场景描述

1、开发分支上有多个commit
2、本次迭代只需要上其中的某一个commit
3、需要将这个commit合并到test分支

处理

1、dev分支git log找到那个commit的SHA-1 校验和 如(62a521)
2、切换到test分支
3、git cherry-pick  62a521

临_择
7 声望4 粉丝