如果您想移动HEAD
到当前的父级HEAD
, 这很容易:
git reset --hard HEAD^
但是有没有简单的方法可以执行与此操作完全相反的操作,即将头设置为当前头的第一个子提交?
现在,我使用 gitk 作为解决方法(alt-tab、向上箭头、alt-tab、中键单击),但我想要一个更优雅的解决方案,当 gitk 不可用时也可以使用该解决方案。
很可能不是最快的解决方案,但它满足了我的需要:
#!/bin/bash
REV=$1
if [[ -z "$REV" ]]; then
echo "Usage: git-get-child <refspec> [<child-number>]"
exit
fi
HASH=$(git rev-parse $REV)
NUM=$2
if [[ -z "$NUM" ]]; then
NUM=1
fi
git rev-list --all --parents | grep " $HASH" | sed -n "${NUM}s/\([^ ]*\) .*$/\\1/p"
The git rev-list --all --parents
正是我需要的:它迭代所有可到达的提交,并为每个提交打印以下行:
SHA1_commit SHA1_parent1 SHA1_parent2
etc.
grep 表达式中的空格可确保仅找到相关 SHA1 为父级的行。然后我们获取第 n 个子项的第 n 行并获取该子项的 SHA1。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)