现在我总是做一个git log
并将哈希值复制/粘贴到git checkout <hash>
,以便检查先前的提交并从那里分支等等。
如果我可以自动完成提交哈希,那将非常棒,所以我不需要输入整个内容,或者依靠鼠标复制/粘贴。
是否有我缺少的专业提示?
答案 0 :(得分:4)
如果它靠近分支或标记,请使用^
或~
表示法,例如origin/master^^^
,origin/master~3
(origin/master
之前的三次提交)
BTW - 不要混淆XYZ~2(2次从XYZ提交)和XYZ ^ 2(多项式/合并提交XYZ的第2次父级)
使用“Short-SHA” - 哈希的唯一前缀(必须至少有4个字符且唯一 - 我通常倾向于使用6个字符):
答案 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
之类的表示法来引用该分支的先前提交。