Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git签出上一次提交而不使用鼠标_Git_Version Control - Fatal编程技术网

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 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 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上工作: