【问题标题】:Move git HEAD without changing anything else移动 git HEAD 而不更改任何其他内容
【发布时间】:2016-09-19 09:34:22
【问题描述】:

我想移动HEAD,但只能这样做。

这意味着我想保持原样:

  • 索引(也称为缓存/暂存区)
  • 工作树
  • 当前分支引用指向的提交

git reset --soft 执行前两个,但不是最后一个。

有没有办法在不创建新分支的情况下做到这一点?

【问题讨论】:

    标签: git git-reset


    【解决方案1】:

    你可以这样做:

    echo $(git rev-parse $commit) > $(git rev-parse --git-dir)/HEAD
    

    但不鼓励。

    【讨论】:

    • 您是否尝试过您的第一个建议?它为我移动了分支参考。为什么不鼓励使用第二种形式?
    • @TomHale 因为git没有进行检查,所以有点苛刻。如果您尝试这样做,请确保之前备份。
    • 跳过了哪些检查,这会如何导致问题?
    • 这只是创建了一个“分离的 HEAD”场景,对吧?
    【解决方案2】:

    使用git 管道命令update-ref

    git update-ref --no-deref HEAD $hash

    $hash 可以是 SHA1、哈希短格式(例如 1c93)、标记或引用)


    请在reflog 留言告知发生了什么变化。为此,请创建一个别名:

    head = "!p=\"$(git log -n1 --oneline --decorate)\" && git update-ref --no-deref -m \"Move HEAD from $p\" HEAD \"$1\" #" # Move HEAD to specified commit-ish
    

    那么当你:

    git head 1c93

    reflog 将包含如下内容:

    1c93601 HEAD@{0}: Move HEAD from fd88175 (HEAD -> master, tag: oldhead, origin/master) Add diff-highlight and icdiff

    【讨论】:

      猜你喜欢
      • 2010-12-01
      • 2021-09-24
      • 2022-12-18
      • 2013-12-28
      • 1970-01-01
      • 1970-01-01
      • 2013-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多