基础命令
~/.gitconfig 只针对当前用户。 可以传递 --global 选项让 Git 读写此文件。
当前使用仓库的 Git 目录中的 config 文件(就是 .git/config):针对该仓库
git config --list
命令来列出所有 Git 当时能找到的配置
git config
来检查 Git 的某一项配置
$ git init
初始化仓库
$ git add *.c
$ git add LICENSE
$ git commit -m ‘initial project version’ 得到维护跟踪着若干个文件的仓库
$ git clone https://github.com/libgit2/libgit2
在当前目录下创建一个名为 “libgit2” 的目录,并在这个目录下初始化一个 .git 文件夹,从远程仓库拉取下所有数据放入 .git 文件夹,然后从中读取最新版本的文件的拷贝
$ git clone https://github.com/libgit2/libgit2 mylibgit
自定义本地仓库的名字
$ git status
查看哪些文件处于什么状态
$ git add 文件
使git开始追踪一个文件
$ git status -s 命令或 $ git status --short
你将得到一种更为紧凑的格式输出。 运行 git status -s ,状态报告输出如下:
$ git status -s
M README
MM Rakefile
A lib/git.rb
M lib/simplegit.rb
?? LICENSE.txt
新添加的未跟踪文件前面有 ?? 标记,新添加到暂存区中的文件前面有 A 标记,修改过的文件前面有 M 标记。 你可能注意到了 M 有两个可以出现的位置,出现在右边的 M 表示该文件被修改了但是还没放入暂存区,出现在靠左边的 M 表示该文件被修改了并放入了暂存区。前面有D标记,代表该文件被删除
有些文件无需纳入Git的管理,也不希望总出现在未跟踪文件列表,在这种情况下,创建一个名为。gitignore的文件,列出要忽略饿文件模式。
$ git diff
比较的是工作目录中当前文件和暂存区域快照之间的差异
$ git diff --cached 或 $ git diff --staged
比较的是暂存区自上次提交之间的差异
$ git commit
将暂存区的文件进行提交,这种会启动文本编辑器以便输入本次提交的说明,可以使用-v选项,将所做的改变的diff输出放到编辑器中从而知道此处提交具体做了哪些修改。退出编辑器时,会自动丢掉注释行,用输入信息生成一次提交。
$ git commit -m “此次提交的说明”
将提交信息与命令放在同一行,直接提交。
提交后的显示:
[master 080eb3e] secone commit // 分支 完整的SHA-校验和
1 file changed, 2 insertions(+) //多少文件和行被修改过
$git -a -m ‘跳过暂存区的提交’
加上-a选项,会跳过暂存区域,自动将已经跟踪过的文件暂存起来(也就是暂存区的文件也会一起更新)一起提交。
$ git rm
移除某个文件
$ git rm 文件
如果只是简单的从工作目录中删除一个文件(没有在暂存区),
$ git rm -f
如果删除之前文件已放入暂存区的话,则必须使用强制删除-f,这样的数据不能被Git恢复。
$ git rm —cached 文件
把文件从仓库中删除,但仍然保留在工作目录中,只是不会再被Git跟踪
$ git mv file_from file_to
移动文件/改名
运行git mv 相当于运行了下面三条命令
$ mv read.md read
$ git rm readme.md
$ git add readme
$ git log
按时间列出所有的更新
$ git log -p -2
-p显示每次提交的内容差异,-2 显示最近两次提交
$ git log —stat
显示每次提交的简略的统计信息
—pretty 这个选项可以指定使用不同于默认格式的方式展示提交历史,这个选项还有一些内建的子选项用来使用,比如oneline将每个提交放在一行显示
$ git commit —amend
这个命令将暂存区的文件提交,最终只有一个提交,第二次提交将覆盖第一次提交的结果
$ git reset 文件名
取消暂存此文件
$ git checkout — 文件名
撤销对文件的修改,它将还原成上次提交的样子
远程仓库的使用
$ git remote
查看已经配置的远程仓库服务器
可以指定选项,会显示需要读写的仓库对于的URL
$ git remote add [shortname] [url]
添加一个新的远程仓库,同时指定一个你可以轻松引用的简写
$ git remote add pb https://github.com/paulboone/ticgit
$ git fetch [remote-name]
访问远程库,拉取所有你还没有的数据,执行完毕后,将会有远程仓库中所有分支的引用。
$ git push [remote-name] [branch-name]
$ git push origin master
推送到远程仓库
$git remote show [remote-name]
查看某个远程仓库的更多信息
$ git remote rename [oldname] [newname]
远程仓库的重命名
$ git remote rm [remote-name]
远程仓库的移除
打标签
轻量标签lightweight 与附注标签 annotated
$ git tag -a v1.0 =m “my version 1.0”
创建附注标签
-m 选项指定了一条将会存储在标签中的信息
$ git show v1.4
可以看到标签信息与对于的提交信息
$ git tag v1.0
创建轻量标签,不需要使用选项
$ git tag -a v1.0 校验和或部分校验和
对过去的提交打标签
$ git push origin v1.0
git push命令并不会传送标签到远程服务器上,在创建完标签后必须显示地推送标签到共享服务器上
$ git push origin —tags
一次性推送很多标签
$ git tag -d v1.0
删掉此标签
$ git push origin :refs/tags/v1.0
使用远程仓库也同步本地,移除这个标签
Git别名
$ git config --global alias.ci commit
这意味着,当要输入 git commit 时,只需要输入 git ci0
Git分支
$ git checkout -b [branch-name]
创建一个新的分支并切换到此分支上
相当于下面两条命令的简写
$ git branch [branch-name]
$ git checkout [branch-name]
$ git merge [branch-name]
合并分支
$ git branch -d [branch-name]
删除分支
$ git branch
如果不加任何参数运行它,会得到当前分支的一个列表,前面带*字符,代表现在检出的那一个分支
$ git branch -v
查看每一个分支的最后一次提交
$ git branch —merger/—no-merged
过滤这个列表中已经合并或尚未合并到当前分支的分支
未合并的分支合并会失败
远程分支
$ git fetch origin
同步远程仓库到本地,抓取本地没有的数据
$ push [remote-name] [branch-name]
将此分支推送到远程仓库
$ git push [remote-name] branch-name:abeanch-name
推送本地分支到一个命名不相同的远程分支
$ git branch -vv
查看设置的所以跟踪分支
需要注意的是这些数字的值来自于从每个服务器上最后一次抓取的数据,此命令没有连接服务器,如果想要统计最新的领先及落后数字,需要在此命令之前抓取所有的远程仓库。可以像下面这样做:
$ git fetch —all ; git branch -vv