git commit --amend
--amend 命令可将当前的提交合并到最近一次提交中
如图: 我们提交 commit D, 然后又添加了一些东西, 补充commit D, 我们可以通过 git commit --amend将添加的东西一起提交到commit D
git revert HEAD
如图: revert用于撤回相关的commit, 但是revert会生成一个新的revert commit来进行撤销操作.
连续使用两次revert命令, 相当于不做任何操作, 但是会有2次revert commit记录
git reset HEAD~
reset 命令也是进行回退操作, 直接将HEAD移动到对应的commit
reset 有三个对应的参数:
- --soft: 将撤回的内容添加到暂存区, 也就是变成 add . 以后的状态
- --mixed(默认): 将撤回的内容添加到工作区, 也就是变成 add . 之前的状态
- --hard: 清除所有改动
- 使用 --hard 命令后如果有想找回清除的内容, 我们可以使用 git reflog 查看所有的git历史, 然后找到对应的commit, 再试使用git reset --hard即可
git cherry-pick
如图: cherry-pick命令可以将其他分支的某次commit应用到当前分支, 会执行一次复制操作
merge --squash
--squash 命令有2个用途
- 可以将本地的多次提交合并成一个commit推送到远程. 例如在本地改了3次bug, 有3次提交, 合并成一个汇总, bug修改推送到远端
- 可以将一个子分支的所有提交合并成一个commit合并到另一个分支, 如下图:
git rebase
rebase 也有2大类用途
- 进行分支合并
如图: 使用rebase合并分支会将其他分支的复制到master HEAD前, 此时master会变成fast-forward的状态, 然后master进行merge, 将HEAD移至最后的commit(要区分直接merge)
- 将多次提交合并成为一次提交
使用 git rebase -i 命令可以将多次commit合并成为一次, 操作后会来到commit 选择的步骤, 具体的命令含义如下:
pick:保留该commit(缩写:p)
reword:保留该commit,但我需要修改该commit的注释(缩写:r)
edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)
squash:将该commit和前一个commit合并(缩写:s)
fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)
exec:执行shell命令(缩写:x)
drop:我要丢弃该commit(缩写:d)
选择了相关commit以后进行保存, 然后执行 git rebase --continue即可完成合并