SourceTree中的交互式变基

Interactive Rebase in SourceTree

一些开发人员认为Git的rebase功能是神秘的-甚至很危险! 虽然不熟练的基础调整确实会给您的队友带来烦人的问题,但是正确进行基础调整是绝对安全的。 这也是在推向原点或合并回主节点之前清理事物的便捷方法。

但是"神秘"吗?

在这篇文章中,我将简要介绍rebase及其表亲,交互式rebase。 然后,我们将使用SourceTree(一个用于处理Git命令的免费UI工具)以及在该过程中可以执行的操作来深入了解交互式的基础:压缩,编辑,删除,重新编写单词和重新排序。

还没有SourceTree吗? 游览并在sourcetreeapp.com上免费下载

变基与交互式变基

在重新定级的背景下,您可能听说过诸如"重写历史记录"或"重播提交"之类的术语,如果您不熟悉Git,这可能会造成混淆。 从本质上讲,变基是一种更改提交历史记录的方法。

但是,为什么将操作称为"变基"呢? 因为rebase允许您选择一个新的基本提交作为功能分支的起点。 您还可以根据当前分支上的提交为基准,然后在其上重新应用(或"重播")后续提交。 像这样:

Git rebase replays your changes against a different commit

当您要合并到master中时,基本的rebase是个好主意,而master从您分支出来以来已经取得了进步。 通过将所有分支提交重新应用到不同的基本提交,可以在执行实际合并之前清除合并冲突。 而且,如果您针对重新定位的分支机构启动了测试运行(您会完全这样做,因为您很认真-是吗?),您可以在将更改推向原产地之前发现集成问题。

交互式rebase是一种变体,可让您在合并或推送至原点之前整理提交历史记录。更改提交历史记录可让您应用20/20后见之明来描述实现此更改所采取的步骤.Git有一个特殊文件git- rebase-todo这只是一个文本文件,其中包含您正在使用的提交列表。 交互式rebase提供了编辑此文件的机会,并使您可以精确控制重播这些提交时发生的情况。

警告:尽管看起来您只是将提交转移到回购历史中的不同点,但是Git实际上是在掩盖之下创建了新的提交-每个提交都有新的阴影。 因此,除非您与队友密切协调,否则不要对已经被推入原始状态的提交进行重新评估。 之后,他们将需要更新其本地存储库副本。

使用SourceTree的交互式变基

如果您是从命令行进行交互式重新设置,则Git将打开一个编辑器,在其中向您发出导致对togit-rebase-todo进行编辑的命令-这有点像Git在执行重新设置时将使用的运行本。 ,SourceTree进入git-rebase-todo并进行编辑。 不同之处在于用户体验:您可以通过单击n点UI与基准库进行交互,而不必记住命令及其语法。

在我们的免费Git教程网站上了解有关交互式变基的内部机制的更多信息。

有两种方法可以在SourceTree中启动交互式基础。 第一种是右键单击(或右键单击)提交,然后交互地选择的子级…第二种是下拉" Repository"菜单并选择" Interactive rebase"。

Navigating to interactive rebase in SourceTree

从那里,您将有机会借助一些操作来重写存储库的历史记录。 让我们一一介绍。

压扁

压扁是在进行一系列"紧急提交"后整理的一种好方法-当您编写一行代码时,由于担心突然的普遍功率不足而导致工作丢失,从而克服了压扁问题。 恐慌的提交往往很小,孤立地看,是微不足道的。 压缩使您可以将与微小相关的提交合并为一个有意义的提交。

要使用SourceTree中的压缩功能,只需将行彼此拖放即可。 或者,可以通过右键单击或使用对话框底部的按钮来将南瓜与上一个选项一起使用。

Squash commits using SourceTree

编辑提交内容

有些提交是不太正确的。 但是git commit –amend命令使您可以执行诸如更改提交消息或将分阶段的更改添加到先前提交的操作。

要使用此功能,请在您要编辑的提交上选中"是否要提交?"复选框。 当重新设置基准继续时,它将退回到SourceTree,允许您在继续之前做任何想做的事情。

重新撰写提交消息

当您正在解决问题的过程中,您不知道整个故事的内容。 但是,现在您已经解决了,就可以了。 改写提交消息可以使您以同事(以及您未来的自我)能够理解的方式讲述故事。

在交互式变基屏幕中双击"描述"列。 将弹出一个窗口,您可以在其中调整或完全替换提交消息。

将分阶段的更改添加到现有提交后,对提交消息重新措辞也很有用。 实际上,在这种情况下,您确实应该更新提交消息,以便所有人都清楚该提交现在包含的内容。

删除中

请谨慎使用。 但是,如果您绝对必须删除一个提交(并且您绝对可以确定这样做不会对您的存储库造成破坏),则可以将其作为SourceTree中交互式交互库的一部分来进行。

与压缩和重新措词一样,双击要删除的提交的描述,然后选择"删除提交"。 还有* poof * –消失了。

重新排序

曾几何时,我遇到了麻烦,因为存储库的提交历史记录清楚地表明,我在功能X之前先于功能Y进行开发,这与项目计划相反。 我也看到过提交历史,其中功能X的提交分散在各处,并与功能Y的提交交织在一起,这使得很难理解功能X在其开发中所处的位置。

无论是免于谴责,还是将相关的提交分组在一起以简化处理,重新排列提交都很容易。 只需将它们拖放到SourceTree的"重新排序和修改"窗口中即可。

避免在交互式基础调整过程中出现混乱

"我的"与"他们的"

假设您已经删除了一个提交,而Git现在正在重放后续的提交。 我们还说,这些后续提交中的一个会影响到作为您删除的提交一部分而更改的文件。 Git不知道该文件的哪个版本可以重播其他提交,因此它必须问您:我的还是他们的-

在这种情况下,我的是指刚删除的提交之前的变更集,而它们是指刚删除的提交之后的变更集。 如果选择我的,则在删除提交后,将丢失对该文件所做的所有更改。 在这种情况下请谨慎处理,不要着急。 但是,即使您在这里确实犯了一个错误,只要不推送更改,您仍然可以重置存储库。

调整上游承诺

我在上面说过,但是需要重复:永远不要对已经被推送的提交进行重新设置。 这可能导致危险和混乱的情况。

如果您对推送的提交进行了重新设置,则SourceTree将告诉您在完成重新设置之后可以进行下拉更改。 如果您知道已经撤消了所有更改,这真是令人困惑。 同样,只要您不执行这些更改,就可以通过重置存储库来避免团队遭受这种混乱。

信心十足

交互式重新设置非常有用,尤其是当您倾向于整天在本地进行提交并在出门时将更改推送出去时。 直到推送为止,您都可以压缩,删除或仅修改提交上的消息,以使历史记录更易于所有人理解。

下次您快速迭代功能或修复时,请尝试一下。 如果您遇到问题或对我们有任何反馈,请通过t @ sourcetree发给我们。 编码愉快!

有关重新定级,工作流和其他Git命令的更多信息,请访问我们的免费教程网站。 您将找到专家的高级技巧,以及对新手的入门帮助。