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

时间:2014-03-14 16:17:56

标签: git version-control rebase atlassian-sourcetree

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

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

1 个答案:

答案 0 :(得分:21)

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


<强>更新

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

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

  
      
  1. 使用git rebase -i <commit>^启动交互式rebase,其中<commit>是您要拆分的提交。事实上,任何提交范围都可以,只要它包含该提交。
  2.   

右键单击要编辑的提交的父提交。从显示的上下文菜单中选择&#34;以<hash>交互方式重新生成<hash>儿童...&#34; SourceTree是所点击提交的缩写&#39;哈希)。

  
      
  1. 使用操作标记要分割的提交&#34;编辑&#34;。
  2.   

git reset HEAD^打开&#34;互动重建&#34;对话框。在列表中标识要分割的提交(它是最后一个),并在&#34; Amend Commit?&#34; 列中选中其复选框。按&#34; 确定&#34; 按钮继续。

  
      
  1. 在编辑提交时,执行HEAD。结果是SourceTree被一个回卷,索引也随之而来。但是,工作树保持不变。
  2.   

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

  
      
  1. 现在将更改添加到您希望在第一次提交中拥有的索引。您可以使用git gui(可能是交互式)或SourceTree(或两者)来执行此操作。
  2.   

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

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

像往常一样使用git rebase --continue并提交分阶段更改。

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

(无评论)

  
      
  1. 使用SourceTree继续变基。
  2.   

&#34;操作&#34; 菜单中选择&#34;继续重新制作&#34;

恭喜!您只需使用SourceTree提供的隐藏&#34; split commit&#34; 命令拆分提交:p

说明

如果出现问题或您下定决心或因任何原因需要取消整个过程,请使用&##中的&#34; Abort Rebase&#34; 34;操作&#34; 菜单。在后台git rebase --abort将调用SourceTree,一切都会恢复到您开始之前的状态。

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

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