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
:
- 启动交互式rebase
git rebase -i <commit>^
,其中<commit>
包含要分割的提交.实际上,只要包含该提交,任何提交范围都可以.
右键单击要编辑的提交的父提交.从出现的上下文菜单中选择"以<hash>
交互方式重新生成子项..."(<hash>
是单击的提交的哈希的缩写).
- 使用"编辑"操作标记要拆分的提交.
SourceTree
打开"Interactive Rebase"对话框.在列表中标识要拆分的提交(它是最后一个)并在"修改提交"列中选中它的复选框..按" 确定"按钮继续.
- 在编辑提交时,执行
git reset HEAD^
.效果是HEAD
由一个重绕,索引也随之而来.但是,工作树保持不变.
SourceTree
在后台运行所需的Git
命令,并在编辑您标记为要修改的提交时停止.右键单击当前的父级,然后从出现的上下文菜单中HEAD
选择"重置(无分支,重新定位<branch>
)到此提交"(<branch>
是您在启动过程时检出的分支的名称).它将询问用于重置的模式; 在"使用模式"列表中选择"混合 - 保持工作副本但重置索引",然后按"确定".
- 现在将更改添加到您希望在第一次提交中拥有的索引.您可以使用
git add
(可能是交互式)或git gui
(或两者)来做到这一点.
这是分时间!将要放入第一次提交的文件和数据添加到索引中; 如果需要,您甚至可以执行原始提交中不存在的更改.但是,请注意,您正在编辑的提交中没有的更改可能与后面提交引入的更改冲突.
- 使用现在适当的提交消息提交now-current索引.
SourceTree
像往常一样使用并提交分阶段的更改.
- 重复最后两步,直到工作树干净.
(没意见)
- 继续使用rebase
git rebase --continue
.
从"操作"菜单中选择"继续重新生成".
恭喜!您只需使用以下提供的隐藏"split commit"命令拆分提交SourceTree
:p
如果出现问题或您下定决心或出于任何原因需要取消整个过程,请使用"操作"菜单中的"中止重新生成".在后台SourceTree
将调用git rebase --abort
,一切都恢复到你开始之前的状态.
如果您需要在同一分支上拆分/编辑多个提交,您可以使用步骤1中最旧的提交并标记修改步骤2中所需的所有提交.其他一切都相同,SourceTree
将重复步骤3-7对于您标记为要修改的每个提交.
这是您可以使用分割提交的方法Atlassian SourceTree
.可以使用任何其他Git
具有GUI的客户端来提供交互式rebase的方法.