当我使用Git checkout master~X时,我将获得Xth合并提交,我真的 want是第X个实际提交(仅限合并提交)。
我该怎么做?
感谢。
答案 0 :(得分:1)
尝试以下内容:
git checkout $(git log --no-merges --skip=2 -1 --format='%H')
将--skip=2
更改为您要跳过的非合并提交数。如果您想要第一次非合并提交,请使用--skip=0
;第二次非合并提交,使用--skip=1
;第三,使用--skip=2
;等
您可以设置别名(使用this answer作为指南):
git config alias.co-non-merge '!git_co_non_merge() { git checkout `git log --no-merges --skip=$(($1 - 1)) -1 --format="%H"` ; } ; git_co_non_merge'
添加--global
以使其成为全局配置更改。然后你可以使用git co-non-merge X
。
答案 1 :(得分:0)
您可以使用
获取没有合并提交的提交列表git log --no-merges
在该列表中,只需取第X个结果即可checkout
。
对于您的用例,可以另外使用--online
标志,因为短显示应该足够了。
答案 2 :(得分:0)
合并提交可以用rebase替换。检查此article。但它只对未来的分支有影响。