使用git的时候,犯错误了怎么办。以下是一些常规的回退措施。

首先,需要了解上一篇笔记里提到的一些基本概念。

先上图

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