- 合并
git merge
- 变基
将当前分支的提交复制到指定的分支之上。
gir rebase
-
交互式变基
在我们正在 rebase 的提交上,我们可以执行以下 6 个动作:- reword:修改提交信息;
- edit:修改此提交;
- squash:将提交融合到前一个提交中;
- fixup:将提交融合到前一个提交中,不保留该提交的日志消息;
- exec:在每个提交上运行我们想要 rebase 的命令;
- drop:移除该提交
- 重置
git reset
默认 git reset --mixed
重置后文件会变红,未add
软重置
重置后提交的文件会变绿,恢复到已添加,未提交的状态(add)
会将 HEAD 移至指定的提交(或与 HEAD 相比的提交的索引),而不会移除该提交之后加入的修改!
输入 git status 后,你会看到我们仍然可以访问在之前的提交上做过的所有修改。这很好,这意味着我们可以修复这些文件的内容,之后再重新提交它们!
硬重置
重置后文件也会丢失
直接将整体状态直接重置到特定提交之前的状态:这甚至包括你在工作目录中和暂存文件上的修改。
Git 丢弃了 9e78i 和 035cc 引入的修改,并将状态重置到了 ec5be 的状态。
- 还原
git revert
- 拣选
git cherry-pick
假设 dev 分支上的提交 76d12 为 index.js 文件添加了一项修改,而我们希望将其整合到 master 分支中。我们并不想要整个 dev 分支,而只需要这个提交!
现在 master 分支包含 76d12 引入的修改了。
- 取回
git fetch
- 拉取
git pull
git pull 实际上是两个命令合成了一个:git fetch 和 git merge。
- reflog
git reflog
展示已经执行过的所有动作的日志
假设我们实际上并不需要合并原有分支。当我们执行 git reflog 命令时,我们可以看到这个 repo 的状态在合并前位于 HEAD@{1}。那我们就执行一次 git reset,将 HEAD 重新指向在 HEAD@{1} 的位置。