如何重新定位这个分支?
How to rebase this branch?
下图由两部分组成:
第一部分 是存储库示例模型,第二部分 是我想使用 git 变基获取的存储库状态。
第二部分我没有忘记任何东西。这正是我想要的。
在那种情况下,我会选择只重建分支而不是徘徊在忍者 rebase 尝试中:
git checkout -b new-tmp1 master
git cherry-pick h i
git checkout -b new-tmp2 master
git cherry-pick j k
然后如果 new-tmp1
和 new-tmp2
满足您的需要,只需移动旧参考:
git branch -f tmp1 new-tmp1
git branch -f tmp2 new-tmp2
如果您要操作的提交数量与图中一样小:使用cherry-pick
git checkout tmp1
# make sure you have a clean working directory before running reset --hard :
git reset --hard <e>
git cherry-pick <h> <i>
git rebase
具有 select 一系列提交的语法:
git checkout tmp1
# you need to mention <g>, the *parent* of the first commit you
# want to replay, not <h>
git rebase --onto <e> <g> tmp1
git checkout tmp2
git reset --hard <k>
git rebase --onto <e> <g> tmp2
关于 git reset --hard
的注释:
git reset --hard <target>
是少数几个危险的 git 命令之一,它可以从您的磁盘中删除修改,而无需先将它们保存在某个地方。
它将活动提交设置为 <target>
,并丢弃对所有跟踪文件的任何修改(这是危险的部分)。
你至少应该在使用前知道它的效果。
一些避免丢失未提交工作的简单方法是:
git stash
使用前的工作git reset --hard
,
- 在使用之前提交您的工作(即使在
git reset
之后,提交仍然可以通过 git reflog
),
下图由两部分组成: 第一部分 是存储库示例模型,第二部分 是我想使用 git 变基获取的存储库状态。
第二部分我没有忘记任何东西。这正是我想要的。
在那种情况下,我会选择只重建分支而不是徘徊在忍者 rebase 尝试中:
git checkout -b new-tmp1 master
git cherry-pick h i
git checkout -b new-tmp2 master
git cherry-pick j k
然后如果 new-tmp1
和 new-tmp2
满足您的需要,只需移动旧参考:
git branch -f tmp1 new-tmp1
git branch -f tmp2 new-tmp2
如果您要操作的提交数量与图中一样小:使用cherry-pick
git checkout tmp1
# make sure you have a clean working directory before running reset --hard :
git reset --hard <e>
git cherry-pick <h> <i>
git rebase
具有 select 一系列提交的语法:
git checkout tmp1
# you need to mention <g>, the *parent* of the first commit you
# want to replay, not <h>
git rebase --onto <e> <g> tmp1
git checkout tmp2
git reset --hard <k>
git rebase --onto <e> <g> tmp2
关于 git reset --hard
的注释:
git reset --hard <target>
是少数几个危险的 git 命令之一,它可以从您的磁盘中删除修改,而无需先将它们保存在某个地方。
它将活动提交设置为 <target>
,并丢弃对所有跟踪文件的任何修改(这是危险的部分)。
你至少应该在使用前知道它的效果。
一些避免丢失未提交工作的简单方法是:
git stash
使用前的工作git reset --hard
,- 在使用之前提交您的工作(即使在
git reset
之后,提交仍然可以通过git reflog
),