Git 将合并提交重写为挤压合并提交
我对一个长期存在的分支进行了合并,由于冲突的解决,我花了很多时间才完成合并 我发现我无法使用Git 将合并提交重写为挤压合并提交,git,merge,git-svn,squash,Git,Merge,Git Svn,Squash,我对一个长期存在的分支进行了合并,由于冲突的解决,我花了很多时间才完成合并 我发现我无法使用git svn发布我的工作:git svn rebase将重新设置合并分支的所有提交的基础,而不是提交一个合并提交。我发现git merge--squash有点太晚了 是否可以将合并提交更改为“挤压合并”提交,而不丢失已完成的所有冲突解决工作(即,不触发新的合并,因为我没有启用rere工具)?可能git-rebase--preserve merges对您有效 下面是对执行此操作时发生的情况的详细回答:
git svn
发布我的工作:git svn rebase
将重新设置合并分支的所有提交的基础,而不是提交一个合并提交。我发现git merge--squash
有点太晚了
是否可以将合并提交更改为“挤压合并”提交,而不丢失已完成的所有冲突解决工作(即,不触发新的合并,因为我没有启用rere
工具)?可能git-rebase--preserve merges
对您有效
下面是对执行此操作时发生的情况的详细回答:
很抱歉,我不喜欢从那里复制和粘贴。我遇到了类似的问题,可以通过简单地重置和重新提交更改来创建压缩提交 起始布局:
* 06074985 (HEAD -> test1) Merge branch 'test2' into test1
|\
| * eb2aa088 (test2) test2 commit
* | c83180c8 test1 commit
|/
* b6628265 (master) base commit
* 5e229615 (HEAD -> test1) squash commit
| * 06074985 (temp) Merge branch 'test2' into test1
| |\
|/ /
| * eb2aa088 (test2) test2 commit
* | c83180c8 test1 commit
|/
* b6628265 (master) base commit
git命令:
git branch temp(因此我不会丢失合并提交)
git复位头~1
git添加。
git提交-m“挤压提交”
git diff temp(只是为了确保没有任何更改)
结尾布局:
* 06074985 (HEAD -> test1) Merge branch 'test2' into test1
|\
| * eb2aa088 (test2) test2 commit
* | c83180c8 test1 commit
|/
* b6628265 (master) base commit
* 5e229615 (HEAD -> test1) squash commit
| * 06074985 (temp) Merge branch 'test2' into test1
| |\
|/ /
| * eb2aa088 (test2) test2 commit
* | c83180c8 test1 commit
|/
* b6628265 (master) base commit
如果您已合并并使用
git merge
(--no ff
)并希望将其转换为与git merge--squash
等效的,则可以使用以下过程(假设合并提交是分支上最近的提交):
- 确保已签出受影响的分支
(在合并之前将分支重置为提交。别担心,它不会丢失!)git reset——硬头~1
(cherry根据您刚刚删除的合并提交与此分支之间的差异,将其作为普通提交进行选择)git cherry pick-m1 HEAD@{1}
我们有一个只提交压缩文件的策略,所以每当有人无意中从BitBucket PR中选择了正常的合并选项,或者单击了令人沮丧的诱人的“合并”时,我偶尔会使用这个策略Slack BitBucket bot上的按钮,该按钮不提供合并策略的选择…我会尝试从合并提交的第一个父级分支出一个临时分支,然后
git cherry pick-m 1
将合并提交到它上。如果一切正常,只需将原始分支重置为结果。有关建议的git cherry pick
调用中-m1
的更多信息,请参阅。可能重复的@kostix建议的git cherry pick-m1
解决方案是最可靠的解决方案,因为它还保留了提交信息。我在下面添加了它作为答案。神奇!一个救生员,谢谢你!惊人的解决方案,工作出色这是不推荐的<代码>--现在首选重新基础合并。