Git 为具有多个合并提交的分支变基
Git rebasing for a branch with multiple merge commits
我正在尝试将旧提交分解为更多提交。该分支相当大,并且沿途有更多的合并提交。一个简化:
HEAD
A---B---merge_commit---C---merge_commit---D
在上述情况下,我想将 D 拆分为两个提交。
我目前在做:
git rebase -i D --rebase-merges
git reset HEAD~
'split into the two commits'
git commit 1
git commit 2
git rebase --continue
问题是我在合并冲突中遇到了冲突,我尝试了策略(ours
、theirs
),甚至是手动操作,但是在 rebase 之后我无法获得分支完成看起来像 rebase 之前的分支(git diff
显示差异)
关于如何解决这个问题的任何想法?
非常感谢。
如果您确定需要与合并后完全相同的状态。
获取合并提交的 sha 并检查每个冲突文件
git checkout <COMMIT-SHA> <path/to/the/messed/up/file>
git add <path/to/the/messed/up/file>
然后
git rebase --continue
当你只是重写祖先时,git filter-branch
是你的朋友。
# in a scratch clone:
git clone -ns . $(mktemp -d); cd $_
git checkout D
git reset --patch @^ # to remove the bits that go in the next commit
git commit --amend
git commit -a
# now that you've got the new commits you want in place of D,
git replace D @
git filter-branch -- $(git branch --contains D)
然后您可以从那里强制推送重写的引用,或者一旦您确定喜欢它所做的或不喜欢的所有重写,就可以在您的原始存储库中重做它。这将 运行 比变基快 很多。
我正在尝试将旧提交分解为更多提交。该分支相当大,并且沿途有更多的合并提交。一个简化:
HEAD
A---B---merge_commit---C---merge_commit---D
在上述情况下,我想将 D 拆分为两个提交。
我目前在做:
git rebase -i D --rebase-merges
git reset HEAD~
'split into the two commits'
git commit 1
git commit 2
git rebase --continue
问题是我在合并冲突中遇到了冲突,我尝试了策略(ours
、theirs
),甚至是手动操作,但是在 rebase 之后我无法获得分支完成看起来像 rebase 之前的分支(git diff
显示差异)
关于如何解决这个问题的任何想法?
非常感谢。
如果您确定需要与合并后完全相同的状态。 获取合并提交的 sha 并检查每个冲突文件
git checkout <COMMIT-SHA> <path/to/the/messed/up/file>
git add <path/to/the/messed/up/file>
然后
git rebase --continue
当你只是重写祖先时,git filter-branch
是你的朋友。
# in a scratch clone:
git clone -ns . $(mktemp -d); cd $_
git checkout D
git reset --patch @^ # to remove the bits that go in the next commit
git commit --amend
git commit -a
# now that you've got the new commits you want in place of D,
git replace D @
git filter-branch -- $(git branch --contains D)
然后您可以从那里强制推送重写的引用,或者一旦您确定喜欢它所做的或不喜欢的所有重写,就可以在您的原始存储库中重做它。这将 运行 比变基快 很多。