git 本地操作(四、撤销更改重写历史记录)

Posted on Posted in git
Tips: 本文创建于2016年5月11日,已超过 2 年,内容或图片可能已经失效!

git 撤销更改

  • git checkout # 还原工作区,上次更改的,还原
  • git reset # 还原暂存区
  • git clean # 对于还没有添加进暂存区的文件,清除
  • git revert # 产生一个新的提交,覆盖之前的提交
git clean -n # 查看,默认不清理 ignore 里的规则文件  
git clean -f # 强制删除  
git clean -n -X # 查看,忽略 ignore 里的规则  
git clean -X -f # 删除,忽略 ignore 规则  

重写历史记录

git commit --amend # 产生一个新的提交,替换当前指向的提交  
git rebase # 维护一个线性的历史  
git reset   
git reflog # 维护了 head 历史信息,通常配合 reset 使用  
  
git reflog # 可以做代码发布??  
git reset --hard 66878cd # 或者 git reset --hard HEAD@{4}  

git 已 add

git reset HEAD 文件 # 不加文件名表示所有

git 未 commit

git checkout 文件

git commit 但未 push

git log # 找到commit的id
git reset --hard id

git commit 但已 push

git revert id
git push

注意:git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit,看似达到的效果是一样的,其实完全不同。

  1. 上面我们说的如果你已经push到线上代码库, reset 删除指定commit以后,你git push可能导致一大堆冲突.但是revert 并不会.
  2. 如果在日后现有分支和历史分支需要合并的时候,reset 恢复部分的代码依然会出现在历史分支里.但是revert 方向提交的commit 并不会出现在历史分支里.
  3. reset 是在正常的commit历史中,删除了指定的commit,这时 HEAD 是向后移动了,而 revert 是在正常的commit历史中再commit一次,只不过是反向提交,他的 HEAD 是一直向前的.

Leave a Reply

Your email address will not be published. Required fields are marked *

fifteen + 10 =