Git 向前移动 n 个提交
Git move n commits forward
我在存储库的提交 C(我刚刚做了 git checkout hash_of_C
)。
A - B - C - ...<19>... - D - ...<many many commits> - Z
哪个Z是master分支的最后一次提交
现在,我想向前推进 20 次提交。
所以,您要将当前所在的分支指针移动到D?
这可以通过几种方式完成:
- 使用 D 的提交哈希,
git merge <commit-id>
将使用 fast-forward 合并过程向前移动指针
- 如果有一个指向 D 的分支指针(比如 D 被 master、develop 等指向)那么
git merge <branch name>
将使用 fast-forward 合并过程向前移动指针
Now, I want to move forward 20 commits.
您只需要结账大师。因为主人最近提交了你想要结帐的 Z,所以这样做:
git checkout master
就是这样。你会看到你的主人的最新提交。
更新
如果提交 D 不是原始分支的一部分,您可以使用带有提交范围的 chery-pick 将您的 20 次提交“导入”回购
您可以 cherry-pick
从一个分支到另一个分支的所有提交,提交范围为 ..
。
git cherry-pick <first commit>..<last-commtit>
如果我理解正确,您想从 C 向前推进 20 次提交,Z 是主分支上的最后一次提交,但不一定是 C 的第 20 次提交。
从C做
C > git checkout $(git rev-list --topo-order HEAD..master | tail -20 | head -1)
它将检查前 20 次提交如果它存在。
我对此并不完全有信心,但这就是它的作用。
git rev-list --topo-order HEAD..master 将为您提供从 C 到 [=32 的所有提交列表=] 每行。
> ➦ b17c0a7 > git rev-list --topo-order HEAD..master
3c5b47003a5bc576d6c5d13b065bb70aef28828f
306fee6443d0e2ebb0a5372dfdff0d55728950f3
02acfd4b6987dfc8bc689a18d21ee82ad8132839
当我们执行 tail -20 时,我们基本上想从该列表的底部 20 行向上切出一块。如果我们执行 head -1,我们会进一步削减列表,只取最上面的项目。这样我们就可以从当前提交中获得第 20 个项目。
也就是 $(git rev-list --topo-order HEAD..master | tail -20 | head -1)
我在存储库的提交 C(我刚刚做了 git checkout hash_of_C
)。
A - B - C - ...<19>... - D - ...<many many commits> - Z
哪个Z是master分支的最后一次提交
现在,我想向前推进 20 次提交。
所以,您要将当前所在的分支指针移动到D?
这可以通过几种方式完成:
- 使用 D 的提交哈希,
git merge <commit-id>
将使用 fast-forward 合并过程向前移动指针 - 如果有一个指向 D 的分支指针(比如 D 被 master、develop 等指向)那么
git merge <branch name>
将使用 fast-forward 合并过程向前移动指针
Now, I want to move forward 20 commits.
您只需要结账大师。因为主人最近提交了你想要结帐的 Z,所以这样做:
git checkout master
就是这样。你会看到你的主人的最新提交。
更新
如果提交 D 不是原始分支的一部分,您可以使用带有提交范围的 chery-pick 将您的 20 次提交“导入”回购
您可以 cherry-pick
从一个分支到另一个分支的所有提交,提交范围为 ..
。
git cherry-pick <first commit>..<last-commtit>
如果我理解正确,您想从 C 向前推进 20 次提交,Z 是主分支上的最后一次提交,但不一定是 C 的第 20 次提交。
从C做
C > git checkout $(git rev-list --topo-order HEAD..master | tail -20 | head -1)
它将检查前 20 次提交如果它存在。
我对此并不完全有信心,但这就是它的作用。
git rev-list --topo-order HEAD..master 将为您提供从 C 到 [=32 的所有提交列表=] 每行。
> ➦ b17c0a7 > git rev-list --topo-order HEAD..master
3c5b47003a5bc576d6c5d13b065bb70aef28828f
306fee6443d0e2ebb0a5372dfdff0d55728950f3
02acfd4b6987dfc8bc689a18d21ee82ad8132839
当我们执行 tail -20 时,我们基本上想从该列表的底部 20 行向上切出一块。如果我们执行 head -1,我们会进一步削减列表,只取最上面的项目。这样我们就可以从当前提交中获得第 20 个项目。
也就是 $(git rev-list --topo-order HEAD..master | tail -20 | head -1)