Git 如何使用Sourcetree拆分过去未推送的提交?

Git 如何使用Sourcetree拆分过去未推送的提交?,git,version-control,rebase,atlassian-sourcetree,Git,Version Control,Rebase,Atlassian Sourcetree,Sourcetree的交互式重基功能非常强大,但我经常发现自己希望能够将一个提交“拆分”为多个较小的提交。我知道有一种方法可以从命令行执行此操作,但我似乎无法在UI中找到任何位置来处理此操作 有没有办法用Sourcetree做到这一点?或者,这是我必须下拉到命令行才能实现目标的地方之一?中解释了使用交互式重基从命令行拆分提交(搜索“拆分提交”)。它不是git命令或选项;它更像是一种提交编辑的方式。您可以使用SourceTree for Mac执行此处描述的步骤。从您的问题中,我了解到您以前使用S

Sourcetree的交互式重基功能非常强大,但我经常发现自己希望能够将一个提交“拆分”为多个较小的提交。我知道有一种方法可以从命令行执行此操作,但我似乎无法在UI中找到任何位置来处理此操作


有没有办法用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
    ,并提交阶段性更改

  • 重复最后两个步骤,直到工作树干净为止
  • (无评论)

  • 使用git-rebase--Continue继续重新基址
  • “操作”菜单中选择“继续重设基础”

    恭喜你!您只需使用
    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,所以在那里有一个解决方案