【问题标题】:Git checkout HEAD+1 and HEAD-1Git 签出 HEAD+1 和 HEAD-1
【发布时间】:2015-06-25 12:34:01
【问题描述】:

在这种情况下:

              v HEAD
     o--o--o--x--o--o (foo)
    /
o--o--o--o--o--o--o (master)

如果我想后退一步,我输入:

$ git checkout HEAD~1
           v HEAD   
     o--o--o--x--o--o (foo)
    /
o--o--o--o--o--o--o (master)

如果我想向前迈出一步,我提出了这个荒谬的命令:

$ git log --pretty=oneline --all | \
       grep -B1 `git rev-parse HEAD` | \
       head -n1 | egrep -o '[a-f0-9]{20,}' | xargs git checkout

                 v HEAD
     o--o--o--x--o--o (foo)
    /                 
o--o--o--o--o--o--o (master)

我能不能做得更好,比如git checkout HEAD+1

我在~/.gitconfig 中的当前实现是:

[alias]
    # Move forward/Backward
    fw = "!git log --pretty=oneline --all | grep -B1 `git rev-parse HEAD` | head -n1 | egrep -o '[a-f0-9]{20,}' | xargs git checkout"
    bw = "!git checkout HEAD~1"

【问题讨论】:

标签: git


【解决方案1】:

Git 提交具有指向其父级的指针,这就是您可以倒退的原因。他们没有指向他们的孩子的指针,所以你不能像你试图做的那样“前进”。您可以做的最好的事情是查看git log 并确定您要签出的提交的哈希值。

【讨论】:

  • 哇哦!这解释了很多事情。这也是完全荒谬的,因为git bisect 能够在分支中前后移动......
  • 我很确定 git bisect 实际上并没有向前移动,它只是从 HEAD 向后移动了一个较小的量,如果这有意义的话。
猜你喜欢
  • 2014-08-25
  • 2019-09-05
  • 2020-12-05
  • 1970-01-01
  • 2010-09-05
相关资源
最近更新 更多