git stash
保存当前工作进度,会把暂存区和工作区的改动保存起来。执行完这个命令后,在运行git status命令,就会发现当前是一个干净的工作区,没有任何改动。使用git stash save 'message...'可以添加一些注释
git stash list
显示保存进度的列表。也就意味着,git stash命令可以多次执行。
git stash pop [–index] [stash_id]
- git stash pop [–index] [stash_id]
- git stash pop 恢复最新的进度到工作区。git默认会把工作区和暂存区的改动都恢复到工作区。
- git stash pop --index 恢复最新的进度到工作区和暂存区。(尝试将原来暂存区的改动还恢复到暂存区)
- git stash pop stash@{1}恢复指定的进度到工作区。stash_id是通过git stash list命令得到的 通过git stash pop命令恢复进度后,会删除当前进度。
git stash apply [–index] [stash_id]
除了不删除恢复的进度之外,其余和git stash pop 命令一样。
git stash drop [stash_id]
删除一个存储的进度。如果不指定stash_id,则默认删除最新的存储进度。
git stash clear
删除所有存储的进度。
git reset [--soft | --mixed | --hard] [HEAD]
git reset 命令用于回退版本,可以指定退回某一次提交的版本。
git reset --mixed [HEAD]
默认,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。git reset --mixed HEAD^可以用来不小心commit错误但还没push的补救.
git reset --soft [HEAD]
让你的 HEAD 回到上一个 commit,但是工作区和暂存区的改动都会保留。这样你可以继续修改,再重新提交。
git reset --hard [HEAD]
参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交.
- HEAD 表示当前版本
- HEAD^ 上一个版本
- HEAD^^ 上上一个版本
- HEAD^^^ 上上上一个版本
- 以此类推...
也可以使用 ~数字表示
- HEAD~0 表示当前版本
- HEAD~1 上一个版本
- HEAD~2 上上一个版本
- HEAD~3 上上上一个版本
git cherry-pick [commit-hash]
把指定的 commit 应用到当前分支,相当于复制了一份改动。非常适合从一个分支把特定改动拿到另一个分支。 如果没有冲突,会直接 commit提交到当前分支,只是还没推送.
git cherry-pick --abort
如果 cherry-pick 还在进行中(例如有冲突未解决),可以使用此命令来中止操作.
git revert [commit-hash]
这个命令会生成一个新的 commit,反向应用指定的 commit,从而撤销之前的改动。这样历史记录保持完整,非常优雅。
git revert [start-commit]^..[end-commit]
可以直接指定一段提交范围,git 会逐个生成新的反向提交
git revert [commit1] [commit2] [commit3]
可以逐个指定提交 ID,批量撤销多个不连续的提交
git reflog
这个命令会列出所有的操作记录,包括那些你以为丢失的 commit。每个操作都有一个索引值,可以根据索引reset恢复到任意一个历史操作点。