我在一个项目中编写了一个跨越数千行修改的特性,现在它都以一个大的提交结束(我已经压缩了正在进行的工作提交)。现在我想将更改拆分为多个提交,以方便审查/可能的话多个PR。
有些文件包含多个应该在不同的提交结束的更改,所以我正在寻找一个WYSIWIG编辑器使用三窗格视图,这将允许我移动一些行到中间提交,同时看到以前和未来的版本(+一些手动更改).我使用IntelliJ IDEA的发展,所以我想象类似于冲突解决对话框.
我可以切换到不同的分支/标签单次提交版本,然后执行Git-〉Compare with Branch(并从那里获取更改),但我正在寻找更方便的方法。
虽然这可能被标记为离题/固执己见,但我相信对不同工作流的中立建议可能是有价值的。
4条答案
按热度按时间xmjla07d1#
对于IntelliJ,我使用以下工作流程:
Alt + 9
Alt + E
*开始重定基准
🏷️!
→**Undo commit...***或者在终端中执行git reset HEAD~1
*Ctrl + K
以选择并提交您的更改以及相应的消息。根据需要重复此操作,直到提交所有更改。pb3skfrl2#
我不确定有没有工具可以实现这个功能,但是根据git文档,你可以使用内置的
rebase
函数来分割提交,比如:然后运行
git reset HEAD^
,你可以手动地将你的修改拆分成提交。你可以使用git add --patch
来更容易地将你的文件内修改拆分成提交。或者如果你的Intellij IDE有一个很好的git GUI,你可以使用它。拆分,至少在我的经验中,必须从命令行完成。xlpyo6sf3#
我在PyCharm/IntelliJ中找到了一种简单的方法。
这个想法包括两次恢复你想要提取的修改(就像摄影领域中的
negative
和positive
),然后合并第一次恢复的提交到common latest commit
中,以便从该提交中移除修改。下面的解释可能看起来很复杂,但实际上只需要点击几下鼠标就可以从提交中提取一些更改:
Alt+9
打开git面板在这一点上你的历史是这样的:
Revert Selected Changes
temporary_reverted_commit
的提交中提交这些更改在这一点上你的历史是这样的:
your_extracted_changes
。在这一点上你的历史是这样的:
temporary_reverted_commit
合并到commit_3
中:将fixup
放在temporary_reverted_commit
提交上,以便它将用commit_3
压缩它,然后保存并退出rebasing接口。ecfdbz9o4#
如果你在提交树的顶端工作,简单地对你之前的提交做一个混合重置,然后把你想要的修改分阶段提交,一个接一个地提交,这是一个不错的选择。
所以,它应该是这样的:
1.重置为当前分支上倒数第二个提交:
1.在第一个commit - use --interactive或您喜欢的git GUI中添加您想要的更改。
1.提交添加的更改
1.重复步骤2和3,直到提交所有更改。