我在存储库中提交C(我只是做了git checkout hash_of_C
)。
A - B - C - ...<19>... - D - ...<many many commits> - Z
哪个Z是主分支中的最后一次提交
现在,我想提前20次提交。
答案 0 :(得分:5)
如果我理解正确,你想要从C前进20次提交,Z是主分支上的最后一次提交,但不一定是C的第20次提交。
来自C do
C > git checkout $(git rev-list --topo-order HEAD..master | tail -20 | head -1)
如果它存在,它将检出20提交。
我对此并不完全自信,但这就是它的作用。
git rev-list --topo-order HEAD..master 将为您提供从C到master的所有提交列表/每行一个。
> ➦ b17c0a7 > git rev-list --topo-order HEAD..master
3c5b47003a5bc576d6c5d13b065bb70aef28828f
306fee6443d0e2ebb0a5372dfdff0d55728950f3
02acfd4b6987dfc8bc689a18d21ee82ad8132839
当我们做尾部-20时,我们基本上想从底部20行中切出这个列表中的一块。如果我们做头-1,我们进一步削减列表,只采取顶部项目。这样我们就可以从当前提交中获得第20个项目。
$(git rev-list --topo-order HEAD..master | tail -20 | head -1)
答案 1 :(得分:1)
那么,您想将当前所在的分支指针移动到D?
这可以通过以下几种方式完成:
git merge <commit-id>
将使用快进合并过程将指针向前移动git merge <branch name>
将使用快进合并过程向前移动指针答案 2 :(得分:-1)
现在,我想提前20次提交。
您只需要结帐主人。因为掌握最新提交它你要结账的Z这样做:
git checkout master
并且它。你会看到你主人的最新提交。
如果提交D不是原始分支的一部分,您可以使用chery-pick,其提交范围为&#34; import&#34;你的20个提交到回购
您可以使用提交范围cherry-pick
..
从一个分支到另一个分支的所有提交。
git cherry-pick <first commit>..<last-commtit>