如何解决如何无法使用源树中的rebase交互来压缩提交?
我正在尝试压缩提交内容,以便我的回购记录不会被诸如“次要修订1”,“次要修订2”之类的不重要的提交所困扰。但是我似乎无法使用sourcetree UI做到这一点。
我做了一些带有自我描述性名称的提交,例如“工作的主要部分”,“次要修订”,“修订2”(尚未推送到远程)。当然,我想将所有这3个提交压缩为适当的提交,例如“ do feature a2a”。
第一步是单击“以交互方式在先前的提交上对子对象重新设置基础”,然后尝试重新排列这些提交,以便它们代表我希望它们进入的逻辑顺序。在我的情况下,我对它们进行排列因此所有次要修订都包含在主要提交中,并按时间顺序排列,当然,我还编辑了提交消息以使其更清晰,如下面的说明here所示:
然后我单击“确定”,但是随后我收到了此消息(合并冲突):
我不知道为什么会有合并冲突?如何解决?无论如何,仅使用sourcetree UI(而不使用git命令行)就能使squash提交正常工作吗?
解决方法
如果您还是想将提交压缩在一起,请不要重新排列它们的顺序-更改顺序是导致冲突的原因。
提交的最终内容将完全相同,在这种情况下,您还是要重新编写消息。
在命令行中,具有以下历史记录:
$ git log --oneline --graph
* 7f6cc32 (HEAD -> master) fix 2
* 11adfe2 minor fix
* 871c26d A major part of the work
* 59a2b18 really new beginning
* e6872a9 Merge branch 'master' into xxx
...
如果我运行git rebase --interactive e6872a9
,首先要编辑一个文件,其内容如下:
pick 59a2b18 really new beginning
pick 871c26d A major part of the work
pick 11adfe2 minor fix
pick 7f6cc32 fix 2
# Rebase e6872a9..7f6cc32 onto 7f6cc32 (4 commands)
#
# Commands:
# p,pick <commit> = use commit
# r,reword <commit> = use commit,but edit the commit message
# e,edit <commit> = use commit,but stop for amending
# s,squash <commit> = use commit,but meld into previous commit
# f,fixup <commit> = like "squash",but discard this commit's log message
...
这里的想法是指出我要对每个提交执行的操作(保留它,用其前身压缩它,对其进行编辑...),保存并退出,然后git将一个接一个地重播这些提交,并应用我选择的操作。
两句话:
- 在检查分支的历史记录时,通常通常会先获得最近的提交,但是在此文件中,列表首先是最早的提交(与之相反)
git log
默认显示的内容); - 如果我将一行编辑为
squash
,则该提交将与上一行中的提交组合(上一次提交)。
因此:如果我想将提交fix 2
,minor fix
和A major part of the work
合并在一起,则可以将文件编辑为:
pick 59a2b18 really new beginning
pick 871c26d A major part of the work
squash 11adfe2 minor fix
squash 7f6cc32 fix 2
# Rebase e6872a9..7f6cc32 onto 7f6cc32 (4 commands)
...
然后保存并退出。
当您使用squash
时,事实证明git
仍然要求您编辑提交消息,因此我无需将其他操作更改为edit
或{{1 }}。
我没有使用Sourcetree的经验,但是我怀疑列表中的提交顺序与文件中的提交顺序相同(“反向”顺序,最早的提交在前)。
只需不更改该顺序,就对两个提交reword
和[Squash with previous]
分别应用minor fix
。
我想我现在知道它是如何工作的:
- 确保压缩的提交必须按相反的时间顺序排列,即:最新提交位于顶部,而不是底部。
- 单击“确定”时,请确保未选中
Amend Commit?
列。您可以在之前编辑提交评论并勾选Amend Commit?
列,但不能准备单击OK
按钮。 - 更重要的是,您不能使用
#
开始新的提交消息。如果必须以错误号开头(例如:#1234
)标记提交,则可能要在#
前面添加一些空格(例如:#1234
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。