Git 与冲突的分支变基
Git rebase with conflicting branches
目前我的 git 存储库中存在以下情况
A - B - C - D - E - F (master)
\- D' - E' - G (branch)
我在某个时候从 D 分支出来,但似乎有人返回并引入了 C
提交,然后我就完全不同步了。现在,我想将 G(branch)
中的更改重新设置为 F(master)
。也就是说,我想改用以下内容
A - B - C - D - E - F(master)
\- G(branch)
换句话说,完全丢弃D'
和E'
。这样做的方法是什么?
我尝试了 git rebase
但我遇到了很多冲突,这些冲突一直要求我合并 D
' 和 E
' 中的更改。
变基到 master
,只进行一次提交(即 G
):
git rebase --onto master HEAD~1
HEAD~1
指定 "upstream",覆盖使用的任何默认上游。 git rebase
将仅重播当前分支中不在上游的提交。这样就只隔离了一次提交。 --onto
指定在挑选提交之前硬重置到的位置。
说到 cherry-picking,我们也可以手动执行等效步骤:
# drop all work, and just become equivalent to master
git reset --hard master
# pick just G out of the dropped work, bringing it into master
git cherry-pick <sha-of-G>
第三种方法是进行 interactive rebase:
git rebase -i
然后编辑掉不需要的提交,只保留 G。如果您不知道交互式变基,这种方法引入了一项有用的技能,因此可以说是三者中最好的。
目前我的 git 存储库中存在以下情况
A - B - C - D - E - F (master)
\- D' - E' - G (branch)
我在某个时候从 D 分支出来,但似乎有人返回并引入了 C
提交,然后我就完全不同步了。现在,我想将 G(branch)
中的更改重新设置为 F(master)
。也就是说,我想改用以下内容
A - B - C - D - E - F(master)
\- G(branch)
换句话说,完全丢弃D'
和E'
。这样做的方法是什么?
我尝试了 git rebase
但我遇到了很多冲突,这些冲突一直要求我合并 D
' 和 E
' 中的更改。
变基到 master
,只进行一次提交(即 G
):
git rebase --onto master HEAD~1
HEAD~1
指定 "upstream",覆盖使用的任何默认上游。 git rebase
将仅重播当前分支中不在上游的提交。这样就只隔离了一次提交。 --onto
指定在挑选提交之前硬重置到的位置。
说到 cherry-picking,我们也可以手动执行等效步骤:
# drop all work, and just become equivalent to master
git reset --hard master
# pick just G out of the dropped work, bringing it into master
git cherry-pick <sha-of-G>
第三种方法是进行 interactive rebase:
git rebase -i
然后编辑掉不需要的提交,只保留 G。如果您不知道交互式变基,这种方法引入了一项有用的技能,因此可以说是三者中最好的。