git checkout上一次提交没有鼠标

时间:2014-02-08 02:09:27

标签: git version-control

现在我总是做一个git log并将哈希值复制/粘贴到git checkout <hash>,以便检查先前的提交并从那里分支等等。

如果我可以自动完成提交哈希,那将非常棒,所以我不需要输入整个内容,或者依靠鼠标复制/粘贴。

是否有我缺少的专业提示?

4 个答案:

答案 0 :(得分:4)

答案 1 :(得分:1)

使用git log --oneline很有帮助,因为您只获得了缩写的提交哈希以及提交消息的第一行。理论上你可以通过awk来管理你想要的提交:

git checkout -b $(git log --oneline | awk '/something/ {print $1}')

...但这是很多打字,所以节省的时间不多。相对提交引用(HEAD^master~3)等的所有建议都很好,但对于相对较新的提交才真正有用(我认为)。我真的不喜欢数数。

假设你正在使用bash:

,你可以将这样的东西放到你的shell dotfiles中
function gen_git_revs()
{
        # Generate a list of named references.
        git show-ref | awk '{print $2}' | sed '
                /refs\/remotes/ {
                        s|refs/remotes/||
                        p
                        s|[^/]*/||
                }
                s|refs/tags/||
                s|refs/heads/||
                '

        # Generate a list of commits on the current
        # branch.
        git rev-list HEAD
}

function git_complete()
{
        local word=${COMP_WORDS[COMP_CWORD]}
        COMPREPLY=($(compgen -W "$(gen_git_revs)" $word))
}

complete -F git_complete git

这将允许您选项卡完成分支名称(本地和远程),标记名称以及当前分支上可访问的任何提交ID(但在具有很长历史记录的存储库中,这可能会导致相当长的暂停,因为它会生成提交ID列表)。这是一个袖手旁观的黑客,更多的是展示如何解决这个问题而不是实际的解决方案。

但我会诚实地对你说:

我只是复制并粘贴。

答案 2 :(得分:0)

你只需要足够的角色来使其独一无二; Git将为您完成剩下的工作。如果你没有使用足够的字符,Git会抱怨。

$ git log be
fatal: ambiguous argument 'be': unknown revision or path not in the working tree.
$ git log be76
commit be7698e7582b7c995264e55767e86cb255c56833
Author: ...
Date:   Fri Feb 7 11:07:13 2014 -0800

如果需要,提供更多。

答案 3 :(得分:-1)

使用诸如master~1之类的表示法来引用该分支的先前提交。