Git
查看所有的配置以及它们所在的文件
1 | git config --list --show-origin |

获取git仓库
在已存在目录中初始化仓库
1 | cd /c/user/my_project |
克隆现有的仓库
1 | git clone https://github.com/libgit2/libgit2 [mylibgit] #自定义本地仓库的名字,你可以通过额外的参数指定新的目录名 |
记录每次更新到仓库
git status 命令查看哪些文件处于什么状态
git add 开始跟踪一个文件
忽略文件
我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件的模式
.gitignore 的格式规范如下:
- 所有空行或者以
#开头的行都会被 Git 忽略。 - 可以使用标准的 glob 模式匹配,它会递归地应用在整个工作区中。
- 匹配模式可以以(
/)开头防止递归。 - 匹配模式可以以(
/)结尾指定目录。 - 要忽略指定模式以外的文件或目录,可以在模式前加上叹号(
!)取反。
1 | 忽略所有的 .a 文件 |
GitHub 有一个十分详细的针对数十种项目及语言的 .gitignore 文件列表, 你可以在 https://github.com/github/gitignore 找到它
查看尚未暂存的文件更新了哪些部分,不加参数直接输入 git diff
提交更新
1 | git commit |
移除文件
git rm 命令完成此项工作,并连带从工作目录中删除指定的文件,这样以后就不会出现在未跟踪文件清单中
查看提交历史
git log 会按时间先后顺序列出所有的提交,最近的更新排在最上面
中一个比较有用的选项是 -p 或 --patch ,它会显示每次提交所引入的差异(按 补丁 的格式输出)。 你也可以限制显示的日志条目数量,例如使用 -2 选项来只显示最近的两次提交
撤消操作
有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。 此时,可以运行带有 --amend 选项的提交命令来重新提交:
1 | git commit --amend |
例如,你提交后发现忘记了暂存某些需要的修改,可以像下面这样操作:
1 | git commit -m 'initial commit' |
最终你只会有一个提交——第二次提交将代替第一次提交的结果。
git reset HEAD <file>... 来取消暂存
git checkout -- <file> 是一个危险的命令。 你对那个文件在本地的任何修改都会消失——Git 会用最近提交的版本覆盖掉它
远程仓库的使用
查看远程仓库
查看你已经配置的远程仓库服务器,可以运行 git remote 命令
会列出你指定的每一个远程服务器的简写。 如果你已经克隆了自己的仓库,那么至少应该能看到 origin ——这是 Git 给你克隆的仓库服务器的默认名字
指定选项 -v,会显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL

运行 git remote add <shortname> <url> 添加一个新的远程 Git 仓库,同时指定一个方便使用的简写
从远程仓库中抓取与拉取
1 | git fetch <remote> |
推送到远程仓库
1 | git push origin master |
查看某个远程仓库
git remote show
1 | git remote show origin |
远程仓库的重命名与移除
你可以运行 git remote rename 来修改一个远程仓库的简写名。 例如,想要将 pb 重命名为 paul,可以用 git remote rename 这样做:
1 | git remote rename pb paul |
分支简介
分支创建
创建一个 testing 分支, 你需要使用 git branch 命令:
1 | git branch testing |
1 | git log` 命令查看各个分支当前所指的对象。 提供这一功能的参数是 `--decorate |
切换到新创建的 testing 分支去:
1 | git checkout testing |
删除分支 带 -d 选项的 git branch 命令来删除分支:
1 | git branch -d hotfix |
遇到冲突时的分支合并
1 | git merge iss53 |
Git 会在有冲突的文件中加入标准的冲突解决标记,这样你可以打开这些包含冲突的文件然后手动解决冲突。 出现冲突的文件会包含一些特殊区段,看起来像下面这个样子:
1 | <<<<<<< HEAD:index.html |
这表示 HEAD 所指示的版本(也就是你的 master 分支所在的位置,因为你在运行 merge 命令的时候已经检出到了这个分支)在这个区段的上半部分(======= 的上半部分),而 iss53 分支所指示的版本在 ======= 的下半部分。 为了解决冲突,你必须选择使用由 ======= 分割的两部分中的一个,或者你也可以自行合并这些内容。
远程分支
可以运行 git merge origin/serverfix 将这些工作合并到当前所在的分支。 如果想要在自己的 serverfix 分支上工作,可以将其建立在远程跟踪分支之上:
1 | git checkout -b serverfix origin/serverfix |
这会给你一个用于工作的本地分支,并且起点位于 origin/serverfix。
如果想要查看设置的所有跟踪分支,可以使用 git branch 的 -vv 选项。 这会将所有的本地分支列出来并且包含更多的信息,如每一个分支正在跟踪哪个远程分支与本地分支是否是领先、落后或是都有。
1 | git branch -vv |
删除远程分支
假设你已经通过远程分支做完所有的工作了——也就是说你和你的协作者已经完成了一个特性, 并且将其合并到了远程仓库的 master 分支(或任何其他稳定代码分支)。 可以运行带有 --delete 选项的 git push 命令来删除一个远程分支。 如果想要从服务器上删除 serverfix 分支,运行下面的命令:
1 | git push origin --delete serverfix |
变基
1 | git checkout experiment |

1 | git checkout master |
