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

cde*_*zaq 13 git version-control rebase atlassian-sourcetree

Sourcetree的交互式rebase功能很棒,但我经常发现自己希望能够将提交"拆分"为多个较小的提交.我知道有一种方法可以从命令行执行此操作,但我似乎无法找到UI中的任何位置来处理此问题.

有没有办法用Sourcetree做到这一点?或者这是我必须下载到命令行以实现目标的地方之一?

axi*_*iac 25

git help rebase(搜索"SPLITTING COMMITS")中解释了使用交互式rebase从命令行拆分提交.它不是git命令或选项; 它更像是一种提交编辑方式.您可以使用SourceTree for Mac执行此处描述的步骤.根据您的问题,我了解您之前使用SourceTree进行了交互式rebase并熟悉其UI.


更新:

我的原始答案(见上文)似乎太神秘了.没有git用于拆分提交的特殊命令,因此SourceTree在接口中不提供命令或选项来执行此操作.您必须使用GUI而不是命令行阅读并遵循文档中说明的步骤.

这些是步骤(引自文档)以及如何使用它们Atlassian SourceTree:

  1. 启动交互式rebase git rebase -i <commit>^,其中<commit>包含要分割的提交.实际上,只要包含该提交,任何提交范围都可以.

右键单击要编辑的提交的父提交.从出现的上下文菜单中选择"以<hash>交互方式重新生成子项..."(<hash>是单击的提交的哈希的缩写).

  1. 使用"编辑"操作标记要拆分的提交.

SourceTree打开"Interactive Rebase"对话框.在列表中标识要拆分的提交(它是最后一个)并在"修改提交"列中选中它的复选框..按" 确定"按钮继续.

  1. 在编辑提交时,执行git reset HEAD^.效果是HEAD由一个重绕,索引也随之而来.但是,工作树保持不变.

SourceTree在后台运行所需的Git命令,并在编辑您标记为要修改的提交时停止.右键单击当前的父级,然后从出现的上下文菜单中HEAD选择"重置(无分支,重新定位<branch>)到此提交"(<branch>是您在启动过程时检出的分支的名称).它将询问用于重置的模式; 在"使用模式"列表中选择"混合 - 保持工作副本但重置索引",然后按"确定".

  1. 现在将更改添加到您希望在第一次提交中拥有的索引.您可以使用git add(可能是交互式)或git gui(或两者)来做到这一点.

这是分时间!将要放入第一次提交的文件和数据添加到索引中; 如果需要,您甚至可以执行原始提交中不存在的更改.但是,请注意,您正在编辑的提交中没有的更改可能与后面提交引入的更改冲突.

  1. 使用现在适当的提交消息提交now-current索引.

SourceTree像往常一样使用并提交分阶段的更改.

  1. 重复最后两步,直到工作树干净.

(没意见)

  1. 继续使用rebase git rebase --continue.

"操作"菜单中选择"继续重新生成".

恭喜!您只需使用以下提供的隐藏"split commit"命令拆分提交SourceTree:p

备注

如果出现问题或您下定决心或出于任何原因需要取消整个过程,请使用"操作"菜单中的"中止重新生成".在后台SourceTree将调用git rebase --abort,一切都恢复到你开始之前的状态.

如果您需要在同一分支上拆分/编辑多个提交,您可以使用步骤1中最旧的提交并标记修改步骤2中所需的所有提交.其他一切都相同,SourceTree将重复步骤3-7对于您标记为要修改的每个提交.

这是您可以使用分割提交的方法Atlassian SourceTree.可以使用任何其他Git具有GUI的客户端来提供交互式rebase的方法.