Skip to content

git 中的回退

Published: at 21:22

使用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 commit

如果我们提交过后发现有个文件改错了,或者只是想修改提交说明,这时可以对相应文件做出修改,将修改过的文件通过”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 国际」 许可协议进行许可,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。