Git:壁球提交早于冲突合并
Git: Squash commits older than conflicting merge
我想压缩一些比“冲突”合并更早的提交。例如:
main branch: A--B--C--D--G--H
dev branch: \-E--F----/
H 是我当前的头,G 是冲突合并(因此我手动解决了冲突的合并),我想压缩 C 和 D - 但如果我尝试这样做,我会变基由于 G 是冲突合并而导致的冲突。
我可以压缩 C 和 D 吗?如果可以,怎么做?我会对无需再次手动合并内容的解决方案感兴趣。
附加信息:git rebase -i B
将所有提交保留在“选择”上时甚至不起作用 - 这应该什么都不做,对吧?
首先:默认情况下,git rebase
完全忽略合并提交。您必须指定 -r | --rebase-merges
才能让 git rebase
“知道”您的合并操作。
与 -i
相结合:您会发现 sequencer 脚本更精细一些,并允许您描述要重放合并的操作。
其次:在您描述的场景中,合并提交的内容将与原始提交的内容相同,因此“解决冲突”等同于:“重新使用与 [=16 完全相同的内容=]".
如果合并时遇到冲突:尝试 运行ning
git restore --staged --source G -- .
# or using shorthands :
git restore -S -s G -- .
如果您需要从索引中的文件中清除“冲突”标志,您可能需要事先 运行 git reset .
。
如果您的本地 git 没有 git restore
(此命令是最近添加的,在 git 2.27 -- 2020 年 6 月):尝试
git read-tree G
应该将 G
的内容放在索引中。
不要为此使用变基,变基可以为你压缩,但它是为比像这样的仅祖先重写更重的提升而构建的,它会做大量(缓慢的)准备工作来实现你喜欢的任何改变顺便。
git replace --graft G B F # (put usable references to those commits here of course)
git filter-branch
并且您已经实现了变基所能实现的一切,大大更快。
我想压缩一些比“冲突”合并更早的提交。例如:
main branch: A--B--C--D--G--H
dev branch: \-E--F----/
H 是我当前的头,G 是冲突合并(因此我手动解决了冲突的合并),我想压缩 C 和 D - 但如果我尝试这样做,我会变基由于 G 是冲突合并而导致的冲突。
我可以压缩 C 和 D 吗?如果可以,怎么做?我会对无需再次手动合并内容的解决方案感兴趣。
附加信息:git rebase -i B
将所有提交保留在“选择”上时甚至不起作用 - 这应该什么都不做,对吧?
首先:默认情况下,git rebase
完全忽略合并提交。您必须指定 -r | --rebase-merges
才能让 git rebase
“知道”您的合并操作。
与 -i
相结合:您会发现 sequencer 脚本更精细一些,并允许您描述要重放合并的操作。
其次:在您描述的场景中,合并提交的内容将与原始提交的内容相同,因此“解决冲突”等同于:“重新使用与 [=16 完全相同的内容=]".
如果合并时遇到冲突:尝试 运行ning
git restore --staged --source G -- .
# or using shorthands :
git restore -S -s G -- .
如果您需要从索引中的文件中清除“冲突”标志,您可能需要事先 运行 git reset .
。
如果您的本地 git 没有 git restore
(此命令是最近添加的,在 git 2.27 -- 2020 年 6 月):尝试
git read-tree G
应该将 G
的内容放在索引中。
不要为此使用变基,变基可以为你压缩,但它是为比像这样的仅祖先重写更重的提升而构建的,它会做大量(缓慢的)准备工作来实现你喜欢的任何改变顺便。
git replace --graft G B F # (put usable references to those commits here of course)
git filter-branch
并且您已经实现了变基所能实现的一切,大大更快。