2012-02-14 60 views
1

当我使用Git checkout master〜X时,我将得到第X个合并提交,我真的想要的是第X个真实提交(不是合并提交)。通过提交命令的Git结账

我该怎么做?

谢谢。

回答

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

+0

“合并提交”也是“提交”,虽然,不是吗? – nickgrim 2012-02-14 16:41:07

+0

绝对正确;感谢锐利的眼睛。 – 2012-02-14 17:10:52

0

你可以让那些没有合并提交使用

git log --no-merges 

在该列表提交列表,简单地采取第X结果做checkout

对于您的用例,--online标志可以额外使用,因为短显示器应该足够了。

0

合并提交可以用rebase替代。检查这article了。但它只对未来的分支有影响。