Git常用操作大全
- 创建新仓库
git init # 在当前目录下 git init <project path> # 指定项目名
- 配置
git config --list # 显示当前的Git配置 git config -e # 编辑Git配置文件,在最后加--global选项代表全局设置 git config user.name "<user name>" git config user.email "<user email address>" # 设置提交代码时的用户信息,在config后加--global选项代表全局设置
- 克隆已有仓库
git clone <repository path> # 若已有仓库在云端服务器,则<repository path>为<username@host:path>的形式
- 工作流
graph LR A(Working) -->|add| B(Index) B --> |commit| C(Local Repository) C --> |checkout| A C --> |push| D(Remote Repository) D --> |fetch/clone| C D --> |pull| A E[HEAD] --> C
其中Working
是工作区(开发的区域),Index
是暂存区,Local Repository
是本地仓库,HEAD
是指向本地仓库中最新版本的游标,Remote Repository
是指远程仓库。
- 添加(至暂存区)
git add <filename> git add -u # 即添加所有改动过的文件(本就存在于暂存区的) git add -p # 添加每个变化前,都会要求确认(对于同一个文件的多处变化,可以实现分次提交)
- 删除文件
git rm <filename> # 删除工作区文件,并且将这次删除放入暂存区,在rm后加上--cached选项代表停止追踪指定文件但该文件会保留在工作区 git mv <file original name> <file current name> # 改名文件,并且将这个改名放入暂存区
- 比较文件的差异
git diff HEAD~<N> # 工作区与某次提交的差异 git diff # 工作区与暂存区(暂存区不为空则是与最后一次提交)的差异 git diff <branch1> <branch2> # 两个分支最后一次提交的差异 git diff --cached # 暂存区与本地仓库的差异(--cached可以换成--staged) # 在最后加--stat选项可以显示详细差异 # 最后可以加上要比较的文件的路径
- 提交
git commit -m "<code committing info>" git commit -a # 提交工作区自上次commit之后的变化直接到本地仓库 git commit -v # 提交时显示所有diff信息 # 提交改动至本地仓库 # 在commit后加--amend选项代表重做上一次提交
将当前暂存区中的所有改动提交至本地仓库。
- 撤销
git reset --soft <commit version> # 重置本地仓库至某次提交(--soft选项可以替换为--keep选项) git reset --mixed <commit version> # 重置本地仓库和暂存区至某次提交(--mixed选项可以省略) git reset --hard <commit version> # 重置本地仓库、暂存区和工作区至某次提交 git checkout <filename> # 恢复暂存区的指定文件到工作区 git checkout <commit version> <filename> # 恢复某次提交指定文件到暂存区和工作区 git revert <commit version> # 新建一个提交用来撤销指定提交,后者的所有变化都将被前者抵消并且应用到当前分支 git stash # 临时保存工作区中未入暂存区的文件(可跨分支),可在最后加上save "<message>" git stash list # 查看临时保存的列表 git stash pop stash@{$num} # 恢复某次临时保存(仅限一次) git stash apply stash@{$num} # 恢复某次临时保存(可多次) git stash drop stash@{$num} # 删除某次临时保存 git clear # 删除所有临时保存
- 查看信息
git status # 显示有变更的文件,(若在最后加上-s选项则可获得简短的输出结果) git log # 显示当前分支的版本历史 git log --stat # 显示当前分支的提交历史以及每次提交发生变更的文件 git log -S <keyword> # 根据关键词搜索提交历史 git log --follow <filename> git whatchanged <filename> # 显示某个文件的版本历史(包括文件改名) git log -p <filename> # 显示指定文件相关的每次差异 git log -<n> --pretty --oneline # 显示过去n次提交 git shortlog -sn # 显示所有提交过的用户(按提交次数排序) git blame <filename> # 显示指定文件是什么人在什么时间修改过 git show <commit version> # 显示某次提交的元数据和内容变化(若在show之后加上--name-only则只显示某次提交发生变化的文件名) git show <commit version>:<filename> # 显示某次提交时某个文件的内容 git reflog # 显示当前分支的最近几次提交
- 分支相关
git branch # 列出所有本地分支 git branch -r # 列出所有远程分支 git branch -a # 列出所有本地分支和远程分支 git branch <branch name> # 新建一个分支但依然停留在当前分支 git branch -d <branch name> # 删除指定分支 git checkout -b <branch name> # 新建一个分支并切换到该分支 git branch <branch name> <commit version> # 新建一个分支指向指定次提交 git branch --track <branch name> <remote branch name> # 新建一个分支并与指定的远程分支建立追踪关系 git branch --set-upstream <branch name> <remote branch name> # 在现有分支与指定的远程分支之间建立追踪关系 git checkout <branch name> # 切换到指定分支并更新工作区 git checkout - # 切换到上一个分支 git merge <branch name> # 合并指定分支到当前分支(不将两分支的提交记录进行线性合并) git rebase <branch name> # 合并指定分支到当前分支(将两分支的提交记录进行线性合并,指定分支的提交记录追加进当前分支的提交记录中) git cherry-pick <commit version> # 选择一次提交合并进当前分支 git push origin --delete <branch name> git branch -dr <remote server>/<branch name> # 删除远程分支
- 远程仓库同步
git push <remote server> <local branch>:<remote branch> # 从本地仓库推送提交至远程仓库的分支,若<local branch>与<remote branch>相同则省略:<remote branch>,若需强制推送则应在push之后加上--force选项 git push <remote server> --all # 推送所有分支到远程仓库 git pull <remote server> <remote branch>:<local branch> # 从远程仓库拉取并合并至本地仓库的分支,若是拉取并合并至当前分支则省略:<local branch> git fetch <remote server> # 下载远程仓库的所有变动 git remote -v # 显示所有远程仓库 git remote show <remote server> # 显示某个远程仓库的信息 git remote add <remote repository name> <remote server> # 增加一个新的远程仓库并命名
- 标签相关
git tag # 列出所有标签 git tag <tag name> <commit version> # 在指定提交中新建一个标签(不指定提交版本则在当前提交中新建) git tag -d <tag name> # 删除本地标签 git push origin :refs/tags/<tag name> # 删除远程标签 git show <tag name> # 查看标签信息 git push <remote server> <tag name> # 提交指定标签 git push <remote server> --tags # 提交所有标签 git checkout -b <branch name> <tag name> # 新建一个分支并指向某个标签
- 其他
git archive # 生成一个可供发布的压缩包