Preface

今天在工作中,需要将项目切回到一个较旧的版本上验证问题,但是此版本在远程仓库上既不是独立分支,也没有tag标记。如果使用git reset --hard <commit id>回退到旧版本,那么打断当前工作流不说,还需要较长的时间,因为还有submodule和LFS回退的问题。

后来经过简单思考,想到了一个简单的,单独clone某个commit的方法,简单记录一下。

How to?

  1. 新建一个空文件夹,并且初始化为git仓库,

    mkdir repo2 && cd repo2
    git init
  2. 设置远端仓库地址,

    git remote add <nick name> <url>
  3. 使用git fetch取得对应的commit,

    git fetch <nick name> <commit id>
  4. 检出FETCH_HEAD即可。

    git checkout FETCH_HEAD -b <new branch>

当然,如果有对远端仓库操作的权限,那么完全可以将此commit打一个临时的tag,然后使用git clone <url> -b <tag> --depth 1即可达到目的。