git 指令备忘

总是记不住命令,每次都要搜索。自己记录一下,方便查找。

git reset

将本地仓库恢复至指定 commit 的状态。
commit 记录和文件都会丢失。

1
git reset --hard fjf88323horjs2eofu23u03ji332uio532u4io32

将本地仓库恢复到 git add 之前的状态。
修改的内容会保留在工作区中。

1
2
git reset fjf88323horjs2eofu23u03ji332uio532u4io32
git reset --mixed fjf88323horjs2eofu23u03ji332uio532u4io32

恢复到 git commit 之前(即 git add之后)的状态。
即修改的内容被暂存,但未提交。

1
git reset --soft fjf88323horjs2eofu23u03ji332uio532u4io32

git pull

从远程获取分支,并且与本地分支合并

简单来说,git pull 相当于 git fetch + git merge
(实际上有差别)。

以下两个命令等效(默认设置下),拉取 origin 并合并

1
2
git pull
git pull origin

拉取远程仓库的 main 分支,并与当前分支合并

1
git pull origin main

拉取远程仓库的 main 分支,并与本地的 dev 分支合并

1
git pull origin main:dev

git remote

管理远程分支

添加一个名为 up 的远程分支

1
git remote add up [email protected]:mdn/content.git

将名为 up 的远程分支改名为 down

1
git remote rename up down

删除名为 down 的远程分支

1
git remote remove down

git submodule

删除子模块

网上很多文章写的 要删除这个文件、编辑那个文件,把步骤搞得很复杂。
其实并不需要,实际上只需要三步。

  • 取消注册子模块

    1
    git submodule deinit submodulePath

    此时,子模块从你的工作区以及 .git/config 中移除了,并未从配置中移除。
    此时可以通过 git submodule init, git submodule update 重新加载子模块.

  • 从工作区和暂存区删除子模块

    1
    git rm -r submodulePath

    此命令会同步删除 .gitmodules 内的相应内容.

  • 删除 .git/modules/ 内的相应内容

增加子模块

1
git submodule add <repo> <path>

这时会增加子模块的配置,以及克隆子模块到本地。

加载子模块

克隆父仓库时是不会加载子模块的,一般需要手动加载。

1
git submodule init

更新子模块

当子模块有更新,需要更新时,执行

1
2
cd submodulepath
git pull origin main

编辑子模块

子模块实际上就是一个完整的仓库。进入子模块的目录,按照正常流程操作即可。