使用git的时候,犯错误了怎么办。以下是一些常规的回退措施。
本文内容稍显陈旧,可以参考这篇:
深入理解Git - 一切皆commit - J.晒太阳的猫 - 博客园
首先,需要了解上一篇笔记里提到的一些基本概念。
先上图
git reset
推荐一篇博客:git reset简介
git reset filename
撤销文件的暂存 git reset filename
撤销暂存区所有的文件暂存 git reset .
下文中的 commitId 指任何可以指代一次提交的标识,如 id ; branch name ; tag name ; HEAD^ ;
git reset —soft
git reset --soft commitId
撤销到 commitId 标识的提交完成之后状态(commitId的那次提交不会被撤销), 并将那次提交之后的修改,都放到暂存区。
git reset —mixed
git reset --mixed commitid
撤销到 commitId 标识的提交完成之后状态(commitId的那次提交不会被撤销), 并将那次提交之后的修改,都放到编辑区,与现在编辑区中的内容合并(如果现在编辑区中有内容的话)。
git reset —hard
git reset --hard commitid
撤销到 commitId 标识的提交完成之后状态(commitId的那次提交不会被撤销), 并将那次提交之后的修改,都丢弃。 达到的效果就是,执行这条命令的分支,会指向commitId指向那次提交。
如在dev分支执行: git reset --hard origin/dev
,达到的效果就是让dev分支与 origin/dev 分支(本地远程仓库中的dev分支)完全一致。
git checkout
checkout 除了切换分支,还可以撤销文件的修改(对于那些没有使用add等命令加入到暂存区的修改)
git checkout -- filename
撤销指定文件的修改
git checkout -- .
撤销全部文件的修改
PS: 可以使用通配符
git revert
如果某个提交已经Push到远程仓库,是不可以用reset的方法删除提交的,这时就要撤销提交。(如果是自己的远端分支,可以删除远端分支后重新push,但对于公共分支就不能这样了。)
git revert 是生成一个新的提交来撤销某次提交,此次提交之前的commit都会被保留。
git revert commitId
是撤消该commit,作为一个新的commit。
git revert dev
: 生成一个新提交,撤销dev分支的最后一次提交。
git commit —amend
如果我们提交过后发现有个文件改错了,或者只是想修改提交说明,这时可以对相应文件做出修改,将修改过的文件通过”git add”添加到暂存区,然后执行以下命令: git commit --amend
然后修改提交说明覆盖上次提交,但只能重写最后一次提交。
staged and stash
staged 和 stash 是两个不同的概念,尤其使用暂存
这个词时。
staged 是 modified
staged
commit
几种状态中的一个。
stash 是将没有提交的代码临时存储到一个堆栈,以便于切换分支或做其它操作。
END
原文链接: https://blog.jgrass.cc/posts/note-revert-on-git/
本作品采用 「署名 4.0 国际」 许可协议进行许可,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。