在不影响当前仓库的情况下签入单独的目录

时间:2016-07-03 10:35:18

标签: git

我想将过去的提交检出到一个单独的目录中,我不希望当前的回购受到影响。

制作一个克隆并检查那里的工作,但这似乎是一种矫枉过正。设置GIT_WORK_TREE或--work-tree无法单独保留当前的repo(虽然它确实在其他地方检出,但它仍然更新HEAD,我不希望这样)。

有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用git worktree

git worktree add ../other-worktree <old-commit-id>

这使您可以在原始存储库中附加一个独立的工作树。完成后,您只需删除新目录即可。

有关详细信息,请参阅git help worktree

git worktree之前你可以做这样的事情,但我现在没有看到任何理由不使用git worktree。它更简单,更不容易出错:

( GIT_INDEX_FILE=$(mktemp) &&
    export GIT_INDEX_FILE &&
    git read-tree "$old-commit-id$ &&
    git checkout-index -a --prefix=../old-commit-copy/ &&
    rm "$GIT_INDEX_FILE"
)