在线图书总目录:https://git-scm.com/book/zh/v2
初次运行 Git 前的配置
使用Git 应该做的第一件事就是设置你的用户名称与邮件地址。 这样做很重要,因为每一个 Git 的提交都会使用这些信息,并且它会写入到你的每一次提交中,不可更改:(不可更改,不可更改,不可更改)
设置你的用户名称与邮件地址:(我设置的时候大家写的都是自己名字拼音,我写了个Rango,后来想改也改不了,也许有别的办法...,)
再次强调,如果使用了$
git config --global user.name"John Doe"
$
git config --global user.email johndoe@example.com
--global
选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情, Git 都会使用那些信息。 当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有
--global
选项的命令来配置
如果想要检查你的配置,可以使用 git config --list
命令来列出所有 Git 当时能找到的配置
获取帮助
若你使用 Git 时需要获取帮助,有三种方法可以找到 Git 命令的使用手册:
例如,要想获得 config 命令的手册,执行 (然并卵,根本看不懂...还需要修炼啊!)$
githelp
<
verb>
$
git<
verb>
--help$
man git-<
verb>
$
githelp
config
获取 Git 仓库
$
git init
克隆现有的仓库 (cd 空格 把你想克隆的文件夹拖进来,eg:test) (克隆仓库的命令格式是 git clone [url] eg:libgit2
)
$
cd /Users/用户名/Desktop/test
$
git clone https://github.com/libgit2/libgit2
检查当前文件状态(可以看到你都改了哪些文件,创建了多少新的文件)
$
git status
git status -s
(状态简览)
??
标记,新添加到暂存区中的文件前面有 A
标记,修改过的文件前面有 M
标记。 你可能注意到了 M
有两个可以出现的位置,出现在右边的 M
表示该文件被修改了但是还没放入暂存区,出现在靠左边的 M
表示该文件被修改了并放入了暂存区跟踪新文件(eg:README)并放到暂存区
$
git add README
当前做的哪些更新还没有暂存? 有哪些更新已经暂存起来准备好了下次提交?
$
git diff
提交更新(写上你这次提交的是什么 eg:007bug)
$
git commit -m"Fix 007bug"
跳过使用暂存区域(提交之前不再需要 git add
文件)
$
git commit -a -m "Fix 007bug"
移除文件(从暂存区域移除 eg:file.md)
git rm file.md
移动文件(从 A.md 到 A )
$
git mv A.md A
查看提交历史(按提交时间列出所有的更新,最近的更新排在最上面)
$
git log
一个常用的选项是
-p
,用来显示每次提交的内容差异。 你也可以加上
-2
来仅显示最近两次提交
$
git log -p -2
git log
的常用选项
| 按补丁格式显示每个更新之间的差异。 |
| 显示每次更新的文件修改统计信息。 |
| 只显示 --stat 中最后的行数修改添加移除统计。 |
| 仅在提交信息后显示已修改的文件清单。 |
| 显示新增、修改、删除的文件清单。 |
| 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。 |
| 使用较短的相对时间显示(比如,“2 weeks ago”)。 |
| 显示 ASCII 图形表示的分支合并历史。 |
| 使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式)。 |
撤消操作
$
git commit --amend
取消暂存的文件(eg:CONTRIBUTING.md)
$
git reset HEAD CONTRIBUTING.md
撤消对文件的修改(你需要知道 git checkout -- [file]
是一个危险的命令,这很重要。 你对那个文件做的任何修改都会消失 - 你只是拷贝了另一个文件来覆盖它。 除非你确实清楚不想要那个文件了,否则不要使用这个命令)
$
git checkout -- CONTRIBUTING.md
远程仓库的使用
查看远程仓库
$
git remote
你也可以指定选项
-v
,会显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL
$
git remote -v
添加远程仓库(git remote add <shortname> <url>
)
推送到远程仓库(只有当你有所克隆服务器的写入权限,并且之前没有人推送过时,这条命令才能生效)
$
git push origin master
远程仓库的移除与重命名(eg:pb 到 paul)同样也会修改你的远程分支名字
$
git remote rename pb paul
打标签(没用过...)
Git 别名(偷懒神器..)(下次用的时候,git co = git checkout ,git br = git branch)
$
git config --global alias.co checkout$
git config --global alias.br branch
分支简介 (里面有各种图形介绍,让你对分支是怎么运行的有个深刻的理解)
NOTE
Git 的 “master” 分支并不是一个特殊分支。 它就跟其它分支完全没有区别。 之所以几乎每一个仓库都有 master 分支,是因为 git init
命令默认创建它,并且大多数人都懒得去改动它。
分支创建(创建一个testing 的分支) 有一个名为 HEAD
的特殊指针,指向当前所在的分支,默认是master。
$
git branch testing
分支切换 (这样 HEAD
就指向 testing
分支了)
$
git checkout testing
$
git checkout -b testing
$
git merge hotfix
这个是把hotfix分支上的修改合并到master上,这个时候HEAD指针先指向master,再指向hotfix,hotfix就不需要了 ,就可以删除了
$
git branch -d hotfix
分支管理
git branch
命令不只是可以创建与删除分支。
如果不加任何参数运行它,会得到当前所有分支的一个列表(注意带 *
字符的就是当前 HEAD
指针所指向的分支,也就是你当前的分支)
git branch -v
--merged
与 --no-merged
这两个有用的选项可以过滤这个列表中已经合并或尚未合并到当前分支的分支。 如果要查看哪些分支已经合并到当前分支,可以运行 git branch --merged
:
如果真的想要删除分支并丢掉那些工作,如同帮助信息里所指出的,可以使用 -D
选项强制删除它(eg:git branch -d testing
)
远程分支
git remote (查看远程分支,最少有一个 origin )
git ls-remote (获得远程引用的完整列表)
拉取
git pull
(会查找当前分支所跟踪的服务器与分支,从服务器上抓取数据然后尝试合并入那个远程分支)
git fetch
命令从服务器上抓取本地没有的数据时,它并不会修改工作目录中的内容。 它只会获取数据然后让你自己合并。 然而,有一个命令叫作 git pull
在大多数情况下它的含义是一个 git fetch
紧接着一个 git merge
命令