git rebase 如何工作
git rebase 命令旨在集成从一个分支到另一个分支的更改。
它用作 git merge 命令的替代方法。
然而,这两个命令之间有一个显着的区别: git rebase 重写提交历史以创建更线性的项目历史。
git rebase 命令有两种模式:标准模式和交互模式。
在标准模式下 git rebase 会自动将当前工作分支中的提交应用到传递分支的头部。
当前分支将重新基于 <base> 。
这是一个有用的教程,可以准确地从 Git 的分支中删除提交。
要在 Git 中删除提交,请按照以下步骤操作。
推送更改
如果你已经推送了你的提交,那么你需要运行带有 --force 标志的 git push 来删除来自远程的提交(假设远程的名称是 oroirn,这是默认的):
git push oroirn HEAD --force
--force 在本地分支的基础上覆盖远程分支。
它会破坏其他开发人员所做的所有推送更改。
它指的是我们在本地分支中没有的更改。
这是推送组合提交的另一种更安全的方法:
git push --force-with-lease oroirn HEAD
--force-with-lease 被认为是一个更安全的选项,它不会覆盖在远程分支上完成的工作,以防更多的提交添加到它上面(例如,由另一个开发人员)。
此外,它还可以避免通过强制推送覆盖其他开发人员的工作。
查找已删除的提交
最后,如果我们想找到已删除的提交,可以借助 git reflog 命令来完成:
git reflog
删除最新提交
通常,git reset 命令用于删除 Git 中的最新提交。
删除最近的提交
要删除最近的提交,请运行以下命令:
git reset --hard HEAD~1
请注意, HEAD~1 表示在 HEAD 之前提交一次。
其中HEAD 是分支的最新提交。
删除多个最新提交
要删除第 N 个最新提交,我们应该使用 HEAD~N 作为 git reset 的参数。
git reset --hard HEAD~N
作为此方法的替代方法,我们可以通过其散列而不是 HEAD~N 来选择适当的提交。
这是如何做到的:
git reset --hard <sha1-commit-hash>
删除历史中间的提交
撤消“中间”提交的更改
存在一种删除历史记录中间提交的安全方法:使用 git revert 命令。
它添加了一个新提交,这会撤消中间提交已更改的所有内容。
git revert <sha1-commit-hash>
从历史中删除“中间”提交。
考虑到 git revert 不会删除中间提交。
如果要从历史记录中删除它,请在交互模式下运行 git rebase:
git rebase -i <sha1-commit-hash>
然后,将打开一个编辑器,显示我们选择的提交之后的提交。
它会让你为每个提交输入命令。
我们需要做的就是在要删除的每个提交的开头键入“drop”。
使用 git rebase 命令时要小心,因为它可能会导致突发问题。
所以,更推荐使用 git revert 命令。
git reflog 如何工作
此命令通常用于记录对分支所做的更新。
在 git reflog 命令的帮助下,我们甚至可以返回到那些尚未被任何标记分支引用的提交。
Reflog 包含有关分支先前状态的信息,并允许在需要时返回到该状态。
git reset 的工作原理
git reset 命令是一个强大的撤销更改的工具。
Git reset 与 git checkout 命令有一些相似之处,因为这两个命令都适用于 HEAD。
Git checkout 仅对 HEAD 引用指针进行操作,而 git reset 会传递该 HEAD 引用指针和当前分支引用指针。