Git move n承诺前进

时间:2017-01-28 02:06:40

标签: git git-checkout

我在存储库中提交C(我只是做了git checkout hash_of_C)。

A - B - C - ...<19>... - D - ...<many many commits> - Z

哪个Z是主分支中的最后一次提交

现在,我想提前20次提交。

3 个答案:

答案 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?

这可以通过以下几种方式完成:

  1. 使用D的提交哈希,git merge <commit-id>将使用快进合并过程将指针向前移动
  2. 如果有一个指向D的分支指针(如主要指向D,开发等),那么git merge <branch name>将使用快进合并过程向前移动指针
  3. Git Book - Basic Branching and Merging详细介绍。

答案 2 :(得分:-1)

  

现在,我想提前20次提交。

您只需要结帐主人。因为掌握最新提交它你要结账的Z这样做:

git checkout master

并且它。你会看到你主人的最新提交。

更新

如果提交D不是原始分支的一部分,您可以使用chery-pick,其提交范围为&#34; import&#34;你的20个提交到回购

您可以使用提交范围cherry-pick ..从一个分支到另一个分支的所有提交。

git cherry-pick <first commit>..<last-commtit>