pick 97d5bd6 Uuuups, bug feo
pick 9be797e Mala mia, arreglar el bug introdujo otro bug
# Rebase 1940c57..9be797e onto 1940c57 (2 commands)
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
pick 97d5bd6 Uuuups, bug feo
squash 9be797e Mala mia, arreglar el bug introdujo otro bug
当你保存退出时,你会看到编辑器再次打开并显示给你
# This is a combination of 2 commits.
# This is the 1st commit message:
Uuuups, bug feo
# This is the commit message #2:
Mala mia, arreglar el bug introdujo otro bug
Rebase 是有史以来最好的git命令之一……但要理解它,了解幕后发生的事情很重要。
Rebase 在你想“重写历史”时非常有用,并且可以在不同的场景中使用。
当另一个开发人员推送更改时处理未能推送
当有人通过推送“击败您”时,它允许您推送您的更改而不进行合并提交。我在这里写了一篇解释这个的帖子。
变基分支
让我们假设您有一个项目
master
(每个人都在工作)并且您创建了一个分支papafrita
。当其他开发人员在 master 上工作时,您在papafrita
. 有时您的存储库的状态如下:“拉”更改的一种选择
master
是git merge master
在papafrita
...中进行更改,但这会产生丑陋的合并提交。这就是美丽的目的git rebase
。在 中papafrita
,这样做就足够了:并且(如果没有冲突)结果将如下:
准备好了!与可怕的合并提交相比,我们有一个更好的故事 :)
挤压(或“挤压”)多个提交
让我们想象一下,有一次你发现了一个错误,你修复了它,然后你意识到你实际上引入了另一个错误......通过修复初始修复,你的存储库中留下了以下状态:
这很难看。为什么?因为提交 3 和 4 对试图了解项目历史中发生的事情的人没有任何价值。去?是的,当然……但对于一些痴迷者来说,最好有一个有意义的故事,其中提交“讲述一个故事”。
使用
rebase
,您可以重写历史记录,如果您要推送到远程存储库,这是非常危险的……因此最好在推送之前先玩一下,以免引起同行的仇恨。在这种情况下,我们可以使用
git rebase
squash 提交。挤压意味着像挤压它们......创建一个新的提交,在 2 之后,类似于应用来自提交 3 和 4 的更改。在控制台中(是的......这对 UI 不起作用)你可以做
-i
表示“交互模式”,因此它将打开您配置的文本编辑器(vim或nano
)并编辑所有提交,直到HEAD~2
(HEAD
是“最后一个”,HEAD~2
是“最后一个负 2”,所以在图中是提交 2)。执行此操作时,您将看到如下内容:
在这里,您可以看到我们正在处理的 2 个提交,然后是一系列说明。对于每个提交,您将说出您想要做什么。出于 的目的
squash
,我们将保留新的并压缩另一个...为此,只需修改文件,使前两行为:当你保存退出时,你会看到编辑器再次打开并显示给你
这是您定义提交消息的机会。如果您保持原样,它将是第一个提交的消息,然后是第二个提交。如果没有,您可以根据自己的喜好对其进行编辑。在这个例子中,我将它修改为“修复丑陋的错误”......所以,最终状态是:
您可能还可以使用更多魔法
git rebase
……但我希望这有助于展示一些非常有用的用例。