笔记-git中的回退

11/27/2017 工具git

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

本文内容稍显陈旧,可以参考这篇:
深入理解Git - 一切皆commit - J.晒太阳的猫 - 博客园 (opens new window)

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

先上图

# git reset

推荐一篇博客:git reset简介 (opens new window)

# 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 (opens new window)

如果我们提交过后发现有个文件改错了,或者只是想修改提交说明,这时可以对相应文件做出修改,将修改过的文件通过"git add"添加到暂存区,然后执行以下命令: git commit --amend
然后修改提交说明覆盖上次提交,但只能重写最后一次提交。

# staged and stash

staged 和 stash 是两个不同的概念,尤其使用暂存这个词时。

staged 是 modified staged commit 几种状态中的一个。
stash 是将没有提交的代码临时存储到一个堆栈,以便于切换分支或做其它操作。


END

更新时间: Monday, March 15, 2021 18:13