1 获取帮助
git help <verb>
git <verb> --help
man git-<verb>
例如,要想获得 config 命令的手册,执行git help config
2 Git 仓库语法
2.1 初始化仓库
git init
2.2 添加并提交文件
git add *.c
git add LICENSE
git commit -m 'initial project version' :将提交信息与命令放在同一行
git commit -a -m 'added new benchmarks' :添加并合并提交 。
git commit --amend 提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了,使用该命令。
2.3 克隆仓库
git clone [url] 如:git clone https://github.com/libgit2/libgit2
克隆并重新命名为mylibgit :git clone https://github.com/libgit2/libgit2 mylibgit
2.4 状态简览
git status
git status -s 得到一种更为紧凑的格式输出
2.5 查看文件的变化
git diff
git diff --staged/git diff --cached :查看已暂存的将要添加到下次提交里的文件
2.6 移除文件
git rm PROJECTS.md
git rm PROJECTS.md -f 这是一种安全特性,用于防止误删还没有添加到快照的数据,这样的数据不能被 Git 恢复
git rm *~ :删除以 ~ 结尾的所有文件
2.7 移动文件
git mv file_from file_to
如:git mv README.md README
以上命令相当于一下命令:
mv README.md README
git rm README.md
git add README
2.8 查看提交历史
git log -p -2 :-p,用来显示每次提交的内容差异。 -2 来仅显示最近两次提交
git log --stat : 每次提交的简略的统计信息,如提交多少文件
git log --pretty=oneline 将每个提交放在一行显示,查看的提交数很大时非常有用。
git log --pretty=format:"%h %s" --graph 添加了一些ASCII字符串来形象地展示你的分支、合并历史
git log --pretty=format:"%h - %an, %ar : %s" 定制要显示的记录格式
git log --oneline --decorate 查看各个分支当前所指的对象
git log --oneline --decorate --graph --all 输出你的提交历史、各个分支指向以及项目的分支分叉情况
git log --author="haha" 操作者haha
git log --since=2.weeks 列出所有最近两周内的提交
例如: 查看2008 年 10 月期间,Junio Hamano 提交的但未合并的测试文件
$ git log --pretty="%h - %s" --author=gitster --since="2008-10-01"
--before="2008-11-01" --no-merges -- t/
2.9 撤销操作
git reset HEAD CONTRIBUTING.md 取消暂存 CONTRIBUTING.md 文件
2.10 创建分支和切换分支
git branch testing
git checkout testing
git checkout -b iss53 当前分支拉个分支并且切换到新分支
git checkout iss52 -b iss53 从iss52分支拉个分支并且切换到iss53新分支
3 打标签
Git 使用两种主要类型的标签:轻量标签(lightweight)与附注标签(annotated)。
一个轻量标签很像一个不会改变的分支 - 它只是一个特定提交的引用。
git tag 以字母顺序列出标签
git tag -l 'v1.8.5*' 使用特定的模式查找标签
3.1 附件标签
git tag -a v1.4 -m 'my version 1.4' -m 选项指定了一条将会存储在标签中的信息。 如果没有为附注标签指定一条信息,Git 会运行编辑器要求你输入信息。
git show v1.4 看到标签信息与对应的提交信息
3.2 轻量标签
轻量标签本质上是将提交校验和存储到一个文件中 - 没有保存任何其他信息
如:git tag v1.4-lw 创建轻量标签,不需要使用 -a、-s 或 -m 选项,只需要提供标签名字
3.3 后期打标签
你也可以对过去的提交打标签。 假设提交历史是这样的:
git log --pretty=oneline
15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch 'experiment'
a6b4c97498bd301d84096da251c98a07c7723e65 beginning write support
0d52aaab4479697da7686c15f77a3d64d9165190 one more thing
6d52a271eda8725415634dd79daabbc4d9b6008e Merge branch 'experiment'
0b7434d86859cc7b8c3d5e1dddfed66ff742fcbc added a commit function
4682c3261057305bdd616e23b64b0857d832627b added a todo file
166ae0c4d3f420721acbb115cc33848dfcc2121a started write support
9fceb02d0ae598e95dc970b74767f19372d61af8 updated rakefile
964f16d36dfccde844893cac5b347e7b3d44abbc commit the todo
8a5cbc430f1a9c3d00faaeffd07798508422908a updated readme
现在,假设在 v1.2 时你忘记给项目打标签,也就是在 “updated rakefile” 提交。 你可以在之后补上标签。 要在那个提交上打标签,你需要在命令的末尾指定提交的校验和(或部分校验和):
git tag -a v1.2 9fceb02
3.4 共享标签
git push origin [tagname] 创建完标签后你必须显式地推送标签到共享服务器上
如:git push origin v1.5
3.5 删除标签
git tag -d <tagname> 删除掉你本地仓库上的标签
如 git tag -d v1.4-lw
git push origin --tags 想要一次性推送很多标签,也可以使用带有 --tags 选项的 git push 命令
上述命令并不会从任何远程仓库中移除这个标签,你必须使用 git push <remote> :refs/tags/<tagname> 如:git push origin :refs/tags/v1.4-lw
3.6 检出标签
git checkout 2.0.0 查看某个标签所指向的文件版本 git checkout 命令,虽然说这会使你的仓库处于“分离头指针(detacthed HEAD)”状态——这个状态有些不好的副作用.
4 Git别名
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
例如,为了解决取消暂存文件的易用性问题,可以向 Git 中添加你自己的取消暂存别名:
git config --global alias.unstage 'reset HEAD --'
这会使下面的两个命令等价:
git unstage fileA
git reset HEAD -- fileA
这样看起来更清楚一些。 通常也会添加一个 last 命令,像这样:
git config --global alias.last 'log -1 HEAD'
这样,可以轻松地看到最后一次提交:
git last
commit 66938dae3329c7aebe598c2246a8e6af90d04646
Author: Josh Goebel dreamer3@example.com
Date: Tue Aug 26 19:48:51 2008 +0800
test for current head
Signed-off-by: Scott Chacon schacon@example.com
你可能想要执行外部命令,而不是一个 Git 子命令。 如果是那样的话,可以在命令前面加入 ! 符号。 如果你自己要写一些与 Git 仓库协作的工具的话,那会很有用。 我们现在演示将 git visual 定义为 gitk 的别名:
git config --global alias.visual '!gitk'
5 git仓库
5.1 查看git远程仓库
git remote . 列出你指定的每一个远程服务器的简写
git remote -v 显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL
git remote show [remote-name] 想要查看某一个远程仓库的更多信息 如:$ git remote show origin
5.2 添加远程仓库
git remote add <shortname> <url> 添加一个新的远程 Git 仓库,同时指定一个名称 如:git remote add pb https://github.com/paulboone/ticgit
git fetch <shortname> 拉取名称的仓库 如:git fetch pb
5.3 从远程仓库拉取
git fetch [remote-name]
5.4 从远程仓库拉取
推送到远程仓库
git push [remote-name] [branch-name]。
当你想要将 master 分支推送到 origin 服务器 如:git push origin master
5.5 远程仓库的移除和重命名
git remote rename 修改一个远程仓库的简写名 git remote rename pb paul 将 pb 重命名为 paul
git remote rm 想要移除一个远程仓库 git remote rm Paul
6.拓展
查看时间段内的提交日志
git log --after="2019-4-19 00:00" --before="2019-4-24 23:59" --pretty=format:"%s %an" --author="guang" --author="jack" --author="qing" > status_report
直接打开文件
git log --after="2019-4-19 00:00" --before="2019-4-24 23:59" --pretty=format:"%s %an" --author="guang" --author="jack" --author="qing" > status_report | open -a TextEdit ./status_report
简洁版
git log --after="2019-4-19 00:00" --before="2019-4-24 23:59" --pretty=format:"%s" --author="guang" --author="jack" --author="qing" > status_report | open -a TextEdit ./status_report
gitk 查看分支的结构
git am --show-current-patch 查看当前分支情况
git branch -r 查看远程分支
control+c 杀死执行命令
git diff --check 检查空白错误并将它们为你列出来
git add --patch 来部分暂存文件
git log --no-merges 来看看漂亮的格式化的项目提交历史像什么样