我目前在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
'中的更改。
答案 0 :(得分:1)
要以master
为基础,仅执行一次提交(即G
):
git rebase --onto master HEAD~1
HEAD~1
指定“上游”,覆盖使用的任何默认上游。 git rebase
仅重播不在上游的当前分支中的提交。这样就隔离了一次提交。 --onto
指定在选择提交之前硬重置到的位置。
说到摘樱桃,我们也可以手动执行等效步骤:
# 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>
第三种方法是进行交互式变基:
git rebase -i
然后编辑掉不需要的提交,只保留G。如果您不知道交互式变基,则此方法会引入有用的技能,因此可以说是三者中最好的。