gpt4 book ai didi

git - 如何在不 check out 文件或更新任何引用的情况下将 HEAD 移动到 Git 中的其他分支?

转载 作者:太空狗 更新时间:2023-10-29 13:09:35 24 4
gpt4 key购买 nike

我通常通过 echo ref: refs/heads/new_branch > .git/HEAD 来完成。如何正确执行?

一些用例:

  1. 您从其他位置导入源代码,现在想将其提交到 Git(但不是当前分支)。
  2. 你的 .git 只是一个符号链接(symbolic link),现在你可以从其他 workdir 访问它(我已经知道 git-new-workdir 可以正确地做到这一点)

因此你想手动选择下一次提交应该有什么父级以及它应该更新什么 ref。

最佳答案

git 管道命令是

git symbolic-ref HEAD refs/heads/existing_branch

你不能进入分离头状态(它需要一个 ref,而不是 SHA)。但是,您可以切换到不存在的 ref(又名未知分支)。为了防止这种情况,也许使用以下 git 别名:

git config --global alias.switch '!f() { git show-ref --heads --verify "refs/heads/$1" && git symbolic-ref -m "switch to branch $1 not touching workdir" HEAD "refs/heads/$1"; }; f'

然后就可以像git switch existing_branch一样使用了。请注意,您需要选项 -m 才能在 git reflog 中查看条目,这通常是您想要的。

注意事项:

  • git reflog HEAD 显示 HEAD 的引用日志(您将再次看到选项 -m 给出的注释)。完整文件(包括前后 SHA,以防你想找到一些丢失的提交)存储在 $(git rev-parse --git-dir)/logs/HEAD (对于 )
  • git show-ref --heads 列出了您可以在 RHS 上使用的所有引用。如 alias 所示,您可以将它与 --verify 一起使用,以检查参数是否是正确的(现有的)ref(又名分支)。
  • 注意:git symbolic-ref 可以指向任何其他 ref,例如 refs/tags/refs/remotes/ 甚至 inside packed引用。这可能不是您想要的,因此别名将其限制为 refs/heads/

关于git - 如何在不 check out 文件或更新任何引用的情况下将 HEAD 移动到 Git 中的其他分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16588804/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com