摘要:关于revert和reset,我们团队的原则是已push到远程仓库的用revert,其它情况用reset。结合实际情况作出相应判断。
一、 reset回退
# 查看历史版本
git log #可以加上 --pretty=oneline 参数 显示比较少的信息。comiit id(即为版本号,一大串的那个)
# 回退到某个历史版本,reset指针回退,
git reset --hard #后面加上某个版本的版本号
# 这时候提交代码会提示当前版本落后
#On branch master
#Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded.
# (use "git pull" to update your local branch)
#nothing to commit, working directory clean
# 强制提交到远程仓库 慎用!!!
git push -f
二、revert
# revert 需要分情况 具体点上述链接 这里只列举普通情况
# revert是把此次的回退作为新的提交
git revert commit #后面跟HEAD最近一次 或者版本号
# 直接提交
git push
三、实际应用场景
情况1:文件已作出修改 但是没进行 add操作 想要还原文件
git checkout 文件名或者目录名 (还原相应的文件或者目录下的文件)
git checkout . 还原全部文件
情况2:文件作出修改 已进行add操作 但是没有 commit 想要删除add
git reset HEAD 撤销全部已提交修改
git reset HEAD filename 撤销对指定文件的修改
情况3:文件作出修改 已进行过 commit 操作但是没有push 想要删除commit
# 查看节点
git log
# commit xxxxxxxxxxxxxxxxxxxxxxxxxx
# Merge:
# Author:
# Date:
# reset
git reset commit_id
情况4:文件作出修改已push到仓库
此次操作之前和之后的commit和history都会保留,并且把这次撤销作为一次最新的提交
git revert HEAD 撤销前一次 commit
git revert HEAD^ 撤销前前一次 commit
git revert commit-id (撤销指定的版本,撤销也会作为一次提交进行保存)
git revert是提交一个新的版本,将需要revert的版本的内容再反向修改回去,版本会递增,不影响之前提交的内容。
也可以使用reset
git reset --hard HEAD^ reset是指将HEAD指针指到指定提交,历史记录中不会出现放弃的提交记录。