Git 命令中的 merge、rebase、reset、revert、cherry-pick 等常用骚操作的具体原理
1.git merge
- Fast-forward (–ff)
当当前分支与正在合并的分支相比没有额外提交时,可能会发生快速向前合并,Git首先尝试执行最简单的选择 Fast-forward 模式合并不会创建新的提交,而是合并当前分支中合并的分支上的提交
master: git merge dev
- No-fast-foward (–no-ff)
如果您当前的分支与要合并的分支相比没有任何额外的提交,那就太好了,但不幸的是,这种情况很少发生!如果我们在当前分支上提交了要合并的分支没有的更改,git将执行No-fast-foward 合并。使用No-fast-foward合并,Git在活动分支上创建一个新的合并提交。提交的父提交指向活动分支和要合并的分支!
2.git rebase
rebase 是”变基”的意思,这里的”基”,在我理解是指[多次] commit 形成的 git workflow,使用 rebase,我们可以改变这些历史提交,修改 commit 信息,将多个 commit 进行组合。
3.git reset
soft reset 软重置
我们可以撤销提交记录,但是保留新建的文件。
Hard reset硬重置
硬重置时:无需保留提交已有的修改,直接将当前分支的状态恢复到某个特定提交下。需要注意的是,硬重置还会将当前工作目录(working directory)中的文件、已暂存文件(staged files)全部移除!
4.git revert
举个例子,我们在 ec5be 上添加了 index.js 文件。之后发现并不需要这个文件。那么就可以使用 git revert ec5be 指令还原之前的更改。
5.git cherry-pick
举个例子:dev 分支上的 76d12 提交添加了 index.js 文件,我们需要将本次提交更改加入到 master 分支,那么就可以使用 git cherry-pick 76d12 单独检出这条记录修改。
6.git fetch
使用 git fetch 指令将远程分支上的最新的修改下载下来。
7.git pull
git pull 指令实际做了两件事:git fetch 和 git merge。
8.git reflog
git reflog 用于显示所有已执行操作的日志!包括合并、重置、还原,也就是记录了对分支的一切更改行为。
git reset HEAD@{1} 将HEAD指针回退到HEAD@{1}这个commit上
转载地址:https://mp.weixin.qq.com/s/sCi_DE1urP1OE13wbgFHUg