常用配置设置
正确配置你的用户信息
GitHub 通过你的 ~/.gitconfig 文件提供的信息来追踪你的更改。如果你在多台机器上工作且 ~/.gitconfig 未正确配置,你很可能会得到重复的提交和混乱的历史记录。你需要根据你的 GitHub 凭证修改以下行。
复制代码
[user]
name = 你的姓名
email = 你的有效邮箱
difftool 和 mergetool 是 Git 分别在执行差异比较或冲突解决操作时会运行的软件。
复制代码
[difftool "opendiff"]
cmd = /usr/bin/opendiff \"$LOCAL\" \"$REMOTE\" -merge \"$MERGED\" | cat
[diff]
tool = opendiff
[merge]
tool = opendiff
为最常用的命令创建别名。
你会发现每天会多次使用相同的 Git 命令。为最常用的命令创建别名可以每天节省宝贵的时间。
复制代码
[alias]
st = status
ci = commit
br = branch
co = checkout
ds = diff --staged
changes = log -n1 -p --format=fuller
amend = commit --amend -C HEAD
undo = clean -f -d
undoci = reset HEAD~1
unstage = reset HEAD --
lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
ls = log --pretty=format:\"%C(yellow)%h %C(blue)%ad%C(red)%d %C(reset)%s%C(green) [%cn]\" --decorate --date=short
lg-full = log --name-status --pretty=fuller
速查表
创建
| 操作 |
命令 |
| 克隆一个现有仓库 |
$ git clone ssh://user@domain.com/repo.git |
| 创建一个新的本地仓库 |
$ git init |
本地更改
| 操作 |
命令 |
| 查看工作目录中已更改的文件 |
$ git status |
| 查看已跟踪文件的更改内容 |
$ git diff |
| 将所有当前更改添加到下一次提交 |
$ git add . |
将 <文件> 中的部分更改添加到下一次提交 |
$ git add -p <文件> |
| 提交所有已跟踪文件中的本地更改 |
$ git commit -a |
| 提交之前已暂存的更改 |
$ git commit |
| 修改最后一次提交(不要修改已发布的提交!) |
$ git commit --amend |
提交历史
| 操作 |
命令 |
| 显示所有提交,从最新的开始 |
$ git log |
| 显示特定文件随时间的变化 |
$ git log -p <文件> |
查看谁在何时修改了 <文件> 的什么内容 |
$ git blame <文件> |
分支与标签
| 操作 |
命令 |
| 列出所有现有分支 |
$ git branch |
| 切换 HEAD 分支 |
$ git checkout <分支> |
| 基于当前 HEAD 创建新分支 |
$ git branch <新分支> |
| 基于远程分支创建新的跟踪分支 |
$ git checkout --track <远程/分支> |
| 删除本地分支 |
$ git branch -d <分支> |
| 为当前提交打上标签 |
$ git tag <标签名> |
更新与发布
| 操作 |
命令 |
| 列出所有当前配置的远程仓库 |
$ git remote -v |
| 显示远程仓库信息 |
$ git remote show <远程> |
添加新的远程仓库,命名为 <远程> |
$ git remote add <远程> <URL> |
从 <远程> 下载所有更改,但不合并到 HEAD |
$ git fetch <远程> |
| 下载更改并直接合并/集成到 HEAD |
$ git pull <远程> <分支> |
| 将本地更改发布到远程仓库 |
$ git push <远程> <分支> |
| 删除远程仓库上的分支 |
$ git branch -dr <远程/分支> |
| 发布你的标签 |
$ git push --tags |
合并与变基
| 操作 |
命令 |
将 <分支> 合并到当前 HEAD |
$ git merge <分支> |
将当前 HEAD 变基到 <分支> 上(不要对已发布的提交进行变基!) |
$ git rebase <分支> |
| 中止变基操作 |
$ git rebase --abort |
| 解决冲突后继续变基 |
$ git rebase --continue |
| 使用配置的合并工具解决冲突 |
$ git mergetool |
| 使用编辑器手动解决冲突,并在解决后标记文件为已解决 |
$ git add <已解决文件> $ git rm <已解决文件> |
撤销操作
| 操作 |
命令 |
| 丢弃工作目录中的所有本地更改 |
$ git reset --hard HEAD |
| 丢弃特定文件的本地更改 |
$ git checkout HEAD <文件> |
| 撤销一个提交(通过生成一个包含相反更改的新提交) |
$ git revert <提交> |
| 将 HEAD 指针重置到先前的提交,并丢弃自那时起的所有更改 |
$ git reset --hard <提交> |
| 将 HEAD 指针重置到先前的提交,并将所有更改保留为未暂存的更改 |
$ git reset <提交> |
| 将 HEAD 指针重置到先前的提交,并保留未提交的本地更改 |
$ git reset --keep <提交> |