Git 如何使用Sourcetree拆分过去未推送的提交?
Sourcetree的交互式重基功能非常强大,但我经常发现自己希望能够将一个提交“拆分”为多个较小的提交。我知道有一种方法可以从命令行执行此操作,但我似乎无法在UI中找到任何位置来处理此操作Git 如何使用Sourcetree拆分过去未推送的提交?,git,version-control,rebase,atlassian-sourcetree,Git,Version Control,Rebase,Atlassian Sourcetree,Sourcetree的交互式重基功能非常强大,但我经常发现自己希望能够将一个提交“拆分”为多个较小的提交。我知道有一种方法可以从命令行执行此操作,但我似乎无法在UI中找到任何位置来处理此操作 有没有办法用Sourcetree做到这一点?或者,这是我必须下拉到命令行才能实现目标的地方之一?中解释了使用交互式重基从命令行拆分提交(搜索“拆分提交”)。它不是git命令或选项;它更像是一种提交编辑的方式。您可以使用SourceTree for Mac执行此处描述的步骤。从您的问题中,我了解到您以前使用S
有没有办法用Sourcetree做到这一点?或者,这是我必须下拉到命令行才能实现目标的地方之一?中解释了使用交互式重基从命令行拆分提交(搜索“拆分提交”)。它不是git命令或选项;它更像是一种提交编辑的方式。您可以使用SourceTree for Mac执行此处描述的步骤。从您的问题中,我了解到您以前使用SourceTree进行过交互回扣,并且熟悉其UI
更新: 看来我最初的答案(见上文)太神秘了。没有用于拆分提交的特殊
git
命令,因此SourceTree
没有在接口中提供用于拆分提交的命令或选项。您必须阅读并遵循中介绍的步骤,使用GUI而不是命令行
以下是步骤(从文档中引用)以及如何使用:
git-rebase-i^
启动交互式rebase,其中
是要拆分的提交。事实上,任何提交范围都可以,只要它包含该提交
的子项的基础…”(
是单击提交的哈希的缩写)
SourceTree
打开“交互式重新基准”对话框。在列表中确定要拆分的提交(它是最后一个提交),并选中列中的复选框“修改提交?”。按“确定”按钮继续
git reset HEAD^
。结果是头
被一次倒转,索引也随之倒转。但是,工作树保持不变SourceTree
在后台运行所需的Git
命令,并在编辑标记为修改的提交时停止。右键单击当前头的父级
,然后从出现的上下文菜单中选择“重置(无分支,重新定基
)到此提交”(
是启动流程时签出的分支的名称)。它将询问重置使用的模式;在“使用模式”列表中选择“混合-保留工作副本但重置索引”,然后按“确定”
git-add
(可能是交互式的)或git-gui
(或两者都可以)来完成这项工作SourceTree
,并提交阶段性更改
SourceTree
:p提供的隐藏的“splitcommit”命令拆分提交
评论
如果出现问题或您下定决心或出于任何原因需要取消整个过程,请使用“操作”菜单中的“中止重新基准”。在后台,SourceTree
将调用git-rebase--abort
,一切都会恢复到开始之前的状态
如果需要在同一分支上拆分/编辑多个提交,可以在步骤1中使用最旧的提交,并标记为修改步骤2中需要的所有提交。其他一切都是一样的,SourceTree
将对标记为修改的每个提交重复步骤3-7
这就是使用Atlassian SourceTree拆分提交的方式。
可以使用任何其他带有GUI的
Git
客户端,该客户端提供了一种执行交互式重新基址的方法。您的意思是拆分已经存在的提交(更改历史记录,如Git-rebase--interactive
),还是从工作副本中添加一些更改,提交它们,然后重复,如git add--patch?更改历史记录。更大的情况是,我有一堆提交,我想在推之前清理这些提交。一些提交需要分解为更小的提交,其中一些提交将与其他提交一起挤压。Sourcetree可以很好地处理压缩和重新排序部分,但我不知道如何拆分现有提交。您是使用Sourcetree for Windows还是Mac?这可能通过GUI完成,只需简单重置,然后定期重新基址,但老实说,直接从命令行执行这类操作要容易得多。我再也不会向任何人推荐GitGUI了,即使是SourceTree。当您从命令行使用git时,会有更多的功能和灵活性。在我看来,使用GUI隐藏所有这些功能只会让事情变得更难,而不是更容易。@Cupcake-Mac,尽管我的一些团队使用Windows,所以在那里有一个解决方案