Skip to content

Latest commit

 

History

History
81 lines (48 loc) · 3.07 KB

05回滚.md

File metadata and controls

81 lines (48 loc) · 3.07 KB
命令 作用
Reset(重置) 将分支顶端移至一个之前的提交。这个命令不要求提交消息。
Rebase(变基) 允许你改变分支历史记录中提交的存放方式。通常用于将多个提交压缩成一个提交。
Revert(还原) 还原共享分支上一个特定提交中做出的变更。需要push。

git reset 回滚到某次提交

git reset [<mode>] [<commit>]

参数 作用
--soft 头部重置为<commit>,会留下所有更改的文件“要提交的更改”。
--mixed 重置索引但不重置工作树(即保留更改的文件但未标记提交)并报告尚未更新的内容。(默认)
--hard 重置索引和工作树。<commit>后对工作树中跟踪文件的任何更改都将被丢弃。
--merge 重置索引并更新工作树中与<commit>HEAD之间不同的文件,但保留索引和工作树之间不同的文件
--keep 重置索引条目并更新工作树中在<commit>HEAD之间不同的文件。

git revert 放弃某次提交

git revert 前后的提交仍会保留在 git log 中,而此次撤销会做为一次新的提交。

git rebase

  • 编辑以前的提交消息
  • 将多个提交合并为一个
  • 删除或恢复不再需要的提交
  1. 重新设置另一个分支和当前分支状态之间的所有提交
git rebase --interactive other_branch_name
  1. 对当前分支中的最后几个提交进行rebase
git rebase -i HEAD~数字  # HEAD~数字 表示最近的几个commit
  1. 变基时有六个命令:

    • pick

    pick只是意味着包括提交。重新安排 pick 命令的顺序会更改提交的顺序。

    如果选择不包括提交,则应删除整行。

    • reword

    重新设置 commit 的机会。提交所做的任何更改均不受影响。

    • edit

    进行更多提交,然后再继续进行变基。比如在两个提交之间插入更多提交。

    • squash

    可以将两个或多个提交合并为一个提交。提交被压缩到其上方的提交中。

    • fixup

    这类似于squash,但提交仅合并到其上方的提交中,并且舍弃消息。

    • exec

    可以对提交运行任意的Shell命令。

问题 解决方案
回滚本地工作区未暂存的改动 git checkout -- <filename>
回滚已暂存的改动,但未被提交 git reset --hard <commit>
回滚commit所做的改动,生成新的commit,log不影响 git revert <commit>
回滚已经提交的文件改动 git rebase -i <commit>