命令 | 作用 |
---|---|
Reset(重置) | 将分支顶端移至一个之前的提交。这个命令不要求提交消息。 |
Rebase(变基) | 允许你改变分支历史记录中提交的存放方式。通常用于将多个提交压缩成一个提交。 |
Revert(还原) | 还原共享分支上一个特定提交中做出的变更。需要push。 |
git reset [<mode>] [<commit>]
参数 | 作用 |
---|---|
--soft | 头部重置为<commit> ,会留下所有更改的文件“要提交的更改”。 |
--mixed | 重置索引但不重置工作树(即保留更改的文件但未标记提交)并报告尚未更新的内容。(默认) |
--hard | 重置索引和工作树。<commit> 后对工作树中跟踪文件的任何更改都将被丢弃。 |
--merge | 重置索引并更新工作树中与<commit> 和HEAD 之间不同的文件,但保留索引和工作树之间不同的文件 |
--keep | 重置索引条目并更新工作树中在<commit> 和HEAD 之间不同的文件。 |
git revert 前后的提交仍会保留在 git log 中,而此次撤销会做为一次新的提交。
- 编辑以前的提交消息
- 将多个提交合并为一个
- 删除或恢复不再需要的提交
- 重新设置另一个分支和当前分支状态之间的所有提交
git rebase --interactive other_branch_name
- 对当前分支中的最后几个提交进行rebase
git rebase -i HEAD~数字 # HEAD~数字 表示最近的几个commit
-
变基时有六个命令:
- 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> |