Sourcetree的交互式rebase功能很棒,但我经常发现自己希望能够将提交“拆分”为多个较小的提交。我知道有一种方法可以从命令行执行此操作,但我似乎无法找到UI中的任何位置来处理此问题。
有没有办法用Sourcetree做到这一点?或者这是我必须下载到命令行以实现目标的地方之一?
答案 0 :(得分:21)
在git help rebase
中解释了使用交互式rebase从命令行拆分提交(搜索" SPLITTING COMMITS")。它不是git命令或选项;它更像是一种提交编辑的方式。您可以使用SourceTree for Mac执行此处描述的步骤。从您的问题我了解到您之前使用SourceTree进行了交互式rebase并熟悉其UI。
<强>更新强>
似乎我原来的答案(见上文)太神秘了。没有用于拆分提交的特殊git
命令,因此SourceTree
在接口中不提供命令或选项来执行此操作。您必须使用GUI而不是命令行阅读并遵循documentation中说明的步骤。
这些步骤(引自文档)以及如何使用Atlassian SourceTree
关注它们:
- 使用
醇>git rebase -i <commit>^
启动交互式rebase,其中<commit>
是您要拆分的提交。事实上,任何提交范围都可以,只要它包含该提交。
右键单击要编辑的提交的父提交。从显示的上下文菜单中选择&#34;以<hash>
交互方式重新生成<hash>
儿童...&#34; (SourceTree
是所点击提交的缩写&#39;哈希)。
- 使用操作标记要分割的提交&#34;编辑&#34;。
醇>
git reset HEAD^
打开&#34;互动重建&#34;对话框。在列表中标识要分割的提交(它是最后一个),并在&#34; Amend Commit?&#34; 列中选中其复选框。按&#34; 确定&#34; 按钮继续。
- 在编辑提交时,执行
醇>HEAD
。结果是SourceTree
被一个回卷,索引也随之而来。但是,工作树保持不变。
Git
在后台运行所需的HEAD
命令,并在编辑您标记为要修改的提交时停止。右键单击当前<branch>
的父级,然后从显示的上下文菜单中选择&#34;重置(无分支,重新定位<branch>
)到此提交&#34; ( git add
是您在启动流程时检出的分支的名称。它将询问用于重置的模式;选择&#34;混合 - 保持工作副本,但重置索引&#34; 在&#34;使用模式&#34;列出并按&#34;确定&#34; 。
- 现在将更改添加到您希望在第一次提交中拥有的索引。您可以使用
醇>git gui
(可能是交互式)或SourceTree
(或两者)来执行此操作。
它的分割时间!将要放入第一次提交的文件和数据添加到索引中;如果需要,您甚至可以执行原始提交中不存在的更改。但是,请注意,您正在编辑的提交中没有的更改可能会与后面提交的更改冲突。
- 使用现在适当的提交消息提交now-current索引。
醇>
像往常一样使用git rebase --continue
并提交分阶段更改。
- 重复最后两步,直到工作树干净。
醇>
(无评论)
- 使用
醇>SourceTree
继续变基。
从&#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的方法。