仅列出常用的命令,详细说明见https://blog.csdn.net/hustlei/article/details/87653788
本地操作
操作 | 命令 | 描述 | |
---|---|---|---|
创建版本库 | git init | 在当前文件夹初始化创建本地库 | |
git clone <repository> [directory] | 把远程库克隆到当前文件夹或指定文件夹 | ||
基本操作 | 添加文件到暂存区 | git add file1 file2 | 把文件添加到暂存区,并跟踪。 |
git add . | 当前目录递归添加到暂存区,并跟踪。 | ||
git add -A | 添加所有文件到暂存区,并跟踪。 | ||
提交暂存区文件到本地库 | git commit -m "add file" | 提交暂存区文件到本地库,并编写说明 | |
修改上一次提交的说明文本 | git commit --amend | 运行命令后显示vi编辑界面,可以修改内容后保存 | |
查看工作区状态 | git status | 列出未跟踪、跟踪未暂存、暂存未提交的文件 git status -s 简略方式显示 | |
工作区暂存区操作 | 撤销暂存 | git restore --staged file | 撤销指定文件暂存。并取消跟踪。(git rm --cached file也ok。git reset file用本地库恢复暂存区也类似) |
比较暂存区和工作区文件 | git diff [file] | 比较暂存区和工作区所有文件或指定文件 | |
删除文件 | git rm file | 从暂存区和工作区删除文件 | |
移动或重命名文件 | git mv file1 file2 | 在暂存区和工作区移动文件 | |
从暂存区恢复文件到工作区 | git restore file | 取消工作区的修改。 file可以是"."。git checkout -- file用暂存区的文件覆盖工作区,暂存区文件不变。 | |
工作区本地库操作 | 比较工作区和本地库 | git diff head file | 比较工作区的文件file与本地库的不同 |
从本地库恢复暂存区和工作区 | git checkout head file | 相当于git reset file, git checkout -- file两个命令。git restore --source=HEAD --staged --worktree file也能实现。 head可以用<commit-id>代替。 | |
本地库操作 | 查看提交记录 | git log [file] | 显示版本库或指定文件修改记录 --pretty=oneline简化显示 --graph树形显示 |
查看所有操作历史 | git reflog | 包括被回退(删除)的commit | |
回退到上一个提交 | git reset --hard head^ | 退回到上一次提交,相当于删除本次提交。并重置暂存区和工作区。 --hard改为--soft不重置暂存区和工作区,--mixed只重置暂存区。 | |
恢复被回退掉的提交 | git reset --hard <commit-id> | 用git reflog查看要恢复的id,然后恢复 | |
stash临时保存现场操作 | 临时保存现场 | git stash | 把当前的工作区保存在stash空间内,并用本地库文件覆盖当前暂存区和工作区 |
查看stash保存列表 | git stash list | 查看stash空间内临时保存的内容。(git stash可以多次保存) | |
从stash恢复 | git stash apply [id] | 恢复最后一次或者指定的stash中的内容。--index同时恢复暂存区 | |
删除stash内容 | git stash drop [id] | 删除最近一次或指定的stash中的内容 |
远程操作
操作 | 命令 | 描述 | |
---|---|---|---|
远程库设置 | 添加远程库 | git remote add origin <远程库地址> | 添加远程库,用origin作为远程库的本地别名。 |
查看远程库 | git remote -v | 查看所有的远程库 | |
查看详细信息 | git remote show origin | 查看指定库的详细信息 | |
重命名 | git remote rename origin newname | 重命名别名 | |
删除 | git remote rm origin | 删除关联的远程库。 | |
远程库本地库操作 | 推送 | git push [origin] [master] | 本地库推送到远程库。可以指定推送的分支 |
强制推送 | git push -f | 强制将本地库推送到远程。如果远程有修改则覆盖 | |
从远程库拉取数据 | git fetch [origin] | 从远程库拉取数据到本地库,不覆盖暂存区和工作区 | |
拉取并合并 | git pull [origin] [远程分支名]:[本地分支名] | 取回远程分支,并自动尝试合并到本地master分支。 | |
补丁操作 | 生成patch补丁 | git diff commit1 commit2 > xx.patch | 根据两个commit的差异生成补丁 |
应用补丁 | git apply xx.patch | 补丁合并到当前分支 |
分支、标签、归档及特殊操作
操作 | 命令 | 描述 | |
---|---|---|---|
分支操作 | 创建分支 | git branch <branchname> | 创建新的分支branchname。 |
切换分支 | git switch dev | 切换到dev分支(git checkout dev也可以) | |
显示分支 | git branch | 显示当前分支 -a列出所有分支(含远程跟踪分支) | |
合并分支 | git merge | 合并指定分支到当前分支 --no-ff -m "some thing":不使用fastforward合并,合并后保留分支的commit记录。合并节点形成一个新commit。 | |
rebase变基 | git rebase master | 把当前分支变基合并到master分支。相比merge变基合并后看不出分支。当前分支直接接在master分支之后合并。 git rebase --continue:如果出现冲突,该命令可以继续。 git rebase --abort:该命令取消rebase。 | |
删除分支 | git branch -d | 删除分支,只能删除已经合并到别的分支后的分支。 -d改为-D可以强制删除指定分支。 | |
重命名分支 | git branch -m | 重命名分支 | |
远程分支操作 | git branch -r | 远程库的分支的操作(创建、删除、移动)的,只需要加上`-r`参数就可以了。 | |
标签 | 创建标签 | git tag v1.0 | 创建一个名称为v1.0的标签 |
查看标签 | git tag | 查看所有标签 | |
查看标签详细信息 | git tag show v1.0 | 查看指定标签的详细信息 | |
删除标签 | git tag -d v1.0 | 删除指定标签 | |
推送到远程库 | git push origin v1.0 | 把指定标签推送到远程库。用--tags可以推送所有未推送的标签 | |
删除远程库标签 | git push origin :refs/tags/v1.0 | 在删除本地标签后,用该命令 | |
归档 | 归档当前库 | git archive head -o xxx.zip | 把head版本归档到指定zip文件 |
git archive master -o xxx.zip git archive master | gzip>xx.tgz | 同上 | ||
特殊操作(非常危险的操作,不建议使用) | git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch file' --prune-empty --tag-name-filter cat -- --all | 删除文件(包括commit记录中) | |
git filter-branch --force --index-filter 'git rm --cached -r --ignore-unmatch folder' --prune-empty --tag-name-filter cat -- --all | 删除文件夹(包括commit记录中) |
环境设置操作
操作 | 命令 | 描述 | |
---|---|---|---|
查看配置 | 查看配置 | git config --list | 列出git能够找到的所有配置 |
查看配置位置 | git config --list --show-origin | 列出所有配置以及配置位置 | |
查看某项配置 | git config name | 查看指定选项配置 | |
配置用户信息 | 用户名 | git config --global user.name "name" | 为整个计算机设置用户名。取消--global为当前项目设置用户名 |
邮件 | git config --global user.email "email@example.com" | 设置email地址 | |
换行符转换 | 不转换 | git config --global core.autocrlf false | 文件中的换行符无论是Cr还是Lf都不转换。 |
库转换为LF检出还原 | git config --global core.autocrlf true | 提交时转换为LF,检出时转换为系统默认符号 | |
提交是转换为LF | git config --global core.autocrlf input | 提交时转换为LF,检出时不转换(建议使用) |