git常用命令
0. 克隆一个仓库到本地
git clone git_url
例如:
git clone git@github.com:buaadf/learngit.git
git支持多种协议,包括https,但通过ssh支持的原生git协议最快。
1. 预配置
| 功能 | 命令 |
|---|
| 设置用户名 | git config --global use.name "Yourname" |
| 设置邮箱 | git config --global user.email "user@email.com" |
| 生成ssh | ssh-keygen -t rsa -C "user@email.com" |
2. 本地修改
| 功能 | 命令 |
|---|
| 创建(初始化)一个新的仓库(repository) | git init |
| 查看工作路径中修改的文件 | git status |
| 查看某文件的修改 | git diff <file> |
| 添加所有当前修改至下一次提交列表 | git add . |
| 添加某文件修改至下一次提交列表 | git add -p <file> |
| 提交全部修改 | git commit -a |
| 提交修改并添加修改说明 | git commit -m "修改说明" |
| 修改上一次提交 | git commit --amend |
3.查看提交(commit)日志
| 功能 | 命令 |
|---|
| 显示所有提交日志,从最新的一次开始 | git log |
| 显示某一文件的提交日志 | git log -p <file> |
| 查看“谁”在“什么时间”对某一文件进行了“什么修改” | git blame <file> |
4. 分支和标签
| 功能 | 命令 |
|---|
| 列出所有分支 | git branch -av |
| 切换分支 | git checkout <branch_name> |
| 创建新的分支 | git branch <new_branch_name> |
| 基于一个远程分支创建新的tracking分支 | git checkout --track <remote/branch_name> |
| 清除本地分支 | git branch -d <branch_name> |
| 为当前提交打标签 | git tag <tag_name> |
5. 远程库
一般使用github作为远程库,在使用github前,需要在github进行注册,并添加ssh。
一般情况下,< remote_name>=origin
| 功能 | 命令 |
|---|
| 关联一个远程库 | git remote add <remote_name> git@server-name:path/xxxx.git |
| 关联后第一次推送master分支 | git push -u <remote_name> master |
| 此后,每次本地提交后,可直接推送 | git push <remote_name> master |
| 列出当前配置的远程库 | git remote -v |
| 查看远程库的信息 | git remote show <remote_name> |
| 从远程库下载所有修改,但不合并到HEAD | git fetch <remote> |
| 从远程库下载所有修改,并合并到HEAD | git pull <remote> <branch> |
| 删除一个远程库的分支 | git branch -dr <remote/branch> |
| 推送标签 | git push --tags |
6. 合并merge&rebase
| 功能 | 命令 |
|---|
| 将某分支合并到当前分支 | git merge <branch> |
| 将当前分支合并到某分支 | git rebase <branch> |
| 丢弃一个合并(rebase) | git rebase --abort |
| 在解决冲突后继续rebase | git rebase --continue |
| 使用配置好的合并工具来解决冲突 | git mergetool |
| 查看分支合并图 | git log --graph --pretty=oneline --abbrev-commit |
7. 撤销
| 功能 | 命令 |
|---|
| 丢弃本地工作区的所有修改 | git reset --hard HEAD |
| 丢弃本地某文件的修改 | git checkout HEAD <file> |
| 丢弃暂存区的修改 | git reset HEAD <file> |
| 丢弃工作区的修改 | git checkout -- <file> |
| 恢复一次提交(通过一次新的提交,进行相反的修改) | git revert <commit_id> |
| 重置HEAD到之前的提交,并丢弃那次提交后的所有修改 | git reset --hard <commit_id> |
| 重置HEAD到之前的提交,并保存所有修改(unstaged) | git reset <commit_id> |
| 重置HEAD到之前的提交,并保存所有未提交的本地修改 | git reset --keep <commit_id> |