git签出上一次提交而不使用鼠标
现在,我总是做一个git签出上一次提交而不使用鼠标,git,version-control,Git,Version Control,现在,我总是做一个git日志并将一个散列复制/粘贴到git checkout,以便签出以前的提交并从那里分支,等等 如果我可以自动完成提交哈希,这样我就不必键入全部内容,也不必依靠鼠标复制/粘贴,那将是非常棒的 是否有我缺少的专业提示?使用诸如master~1之类的符号来引用该分支的上一次提交。使用诸如master~1之类的符号来引用该分支的上一次提交。 如果它靠近分支或标记,则使用^或~符号,例如原点/主机^^^,原点/主机~3(在原点/主机之前提交三次) - 顺便说一句-不要混淆XYZ~2
git日志
并将一个散列复制/粘贴到git checkout
,以便签出以前的提交并从那里分支,等等
如果我可以自动完成提交哈希,这样我就不必键入全部内容,也不必依靠鼠标复制/粘贴,那将是非常棒的
是否有我缺少的专业提示?使用诸如
master~1
之类的符号来引用该分支的上一次提交。使用诸如master~1
之类的符号来引用该分支的上一次提交。- 如果它靠近分支或标记,则使用
或^
符号,例如~
,原点/主机^^^
(在原点/主机~3
之前提交三次)原点/主机
- -
- 顺便说一句-不要混淆XYZ~2(2次从提交到XYZ)和XYZ^2(多重/合并提交XYZ的第二个父级)
- 使用“Short SHA”-哈希的唯一前缀(必须至少为4个字符且唯一-我习惯于使用6个字符):
- -
- (也请阅读评论)
- 如果它靠近分支或标记,则使用
或^
符号,例如~
,原点/主机^^^
(在原点/主机~3
之前提交三次)原点/主机
- -
- 顺便说一句-不要混淆XYZ~2(2次从提交到XYZ)和XYZ^2(多重/合并提交XYZ的第二个父级)
- 使用“Short SHA”-哈希的唯一前缀(必须至少为4个字符且唯一-我习惯于使用6个字符):
- -
- (也请阅读评论)
git checkout -b $(git log --oneline | awk '/something/ {print $1}')
…但那需要大量的打字,所以节省不了多少时间。所有关于相对提交引用(HEAD^
,master~3
)等的建议都很好,但是(我认为)对相对最近的提交确实有用。我真的不喜欢数数
假设您使用的是bash,您可以将类似的内容放入shell点文件中:
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列表时暂停)。这是一个即兴的黑客行为,更多的是为了演示如何进行,而不是一个实际的解决方案
但我要对你说实话:
我只是复制和粘贴。使用git log--oneline很有帮助,因为您只会在提交消息的第一行获得缩写的提交哈希。理论上,您可以通过awk来获取所需的提交:
git checkout -b $(git log --oneline | awk '/something/ {print $1}')
…但那需要大量的打字,所以节省不了多少时间。所有关于相对提交引用(HEAD^
,master~3
)等的建议都很好,但是(我认为)对相对最近的提交确实有用。我真的不喜欢数数
假设您使用的是bash,您可以将类似的内容放入shell点文件中:
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列表时暂停)。这是一个即兴的黑客行为,更多的是为了演示如何进行,而不是一个实际的解决方案
但我要对你说实话:
我只是复制粘贴。你只需要足够的字符就可以使它独一无二;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
如果需要,请提供更多。您只需要足够的字符使其唯一;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
如果需要,请提供更多信息。如果您在关键点标记分支,则自动完成将在以后可能的dup上工作:如果您在关键点标记分支,则自动完成将在以后可能的dup上工作: