GIT进阶命令

177 阅读3分钟

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恢复到任意一个历史操作点。