有没有git的取消检出命令?

5
使用git clone命令时,可以使用选项-n来防止在克隆完仓库后检出HEAD。是否有可能手动执行此操作呢? 编辑:我认为在手册中,选项-n的解释比实际效果更好:使用-n克隆后,我的所有工具都显示我仍然位于主分支上;唯一的区别是所有文件都被标记为已删除。这并不是我所谓的“未检出”的情况。
因此,也许我应该只删除HEAD

如果您想从非裸库创建一个裸库,我认为这已经有了解决方案:https://dev59.com/m3I95IYBdhLWcg3wsQBm - Mike Seplowitz
不,我只想要“取消签出”;例如,拥有与git clone -n相同的存储库。 - Debilski
刚刚完成了模拟 git clone -n 的答案。 - VonC
2个回答

7
最简单的解决方法是裸克隆它:
git clone --bare your_repo bare_repo

(并删除您签出的存储库)

基本上,您需要将存储库转换为裸存储库,根据此问题,可以手动完成以下步骤:

  • .git/config文件中的bare = false更改为bare = true
  • 删除your_repo/*中除.git文件以外的所有内容
  • .git目录中的内容移动到your_repo/中,并删除.git目录

另请参见Git:将普通存储库转换为裸存储库,如MikeSep在评论中提到的那样。

如果您需要取消签出,请将bare保持为false,然后只需删除除.git之外的所有内容。这应该类似于git clone -n


1
谢谢。现在我真正尝试了clone -n,我发现它确实是无用的。 - Debilski

0

我理解原始问题是想保留存储库,但删除工作树。当您想在完成一些工作后将项目放置在后台时,这非常有用。

一个解决方案是创建一个带有空工作树的分支,并检出空分支:

git checkout --orphan archived
git reset --hard
git commit -m "Project is archived" --allow-empty

说明:

  1. git checkout --orphan archived 创建了一个名为 archived 的分支,与项目无关的历史记录。
  2. git reset --hard 删除了工作树中存在的版本化文件。它保留了未版本化的文件,如果需要可以使用 git clean -fd 进行清理。
  3. git commit -m "Project is archived" --allow-emptyarchived 分支上创建了一个没有文件的提交。

git clone -n 选项不同,这种方法:

  • 不会使索引显示所有文件为“已删除”
  • 明确记录了工作树发生的情况。当前分支名称将是“archived

因此,“存档”仓库可以通过 git checkout master 重新激活,并随后可以使用 git checkout archived 再次存档。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接