获取Git仓库
在现有目录中初始化仓库
git init
该命令将创建一个名为.git的子目录,包含初始化Git仓库的所有必须文件,这些文件是Git仓库的骨干
克隆现有的仓库
git clone https://github.com/libgit2/libgit2
本地创建一个libgit2目录,并初始化一个.git文件夹
git clone https://github.com/libgit2/libgit2 mylibgit
执行与上一个命令相同的操作,但是本地仓库的名字是mylibgit
记录每次更新到仓库
文件状态:已跟踪、未跟踪
检查当前文件状态
git status
跟踪新文件
git add README
暂存以修改文件
git add:
- 开始跟踪新文件
- 把已跟踪的文件放到暂存区
- 合并时把有冲突的文件标记为已解决状态
这个命令可以理解为“添加内容到下一次commit中”,而不是“将一个文件添加到项目中”
忽略文件
cat .gitignore
*.[oa]
*~
文件。gitignore的格式规范如下:
- 所有空行或者以#开头的行都会被Git忽略。
- 可以使用标准的glob模式匹配
- 匹配模式可以以(/)开头防止递归
- 匹配模式可以以(/)结尾指定目录。
- 要忽略制定模式以外的文件或目录,可以在模式前加上(!)取反。
GitHub 有一个十分详细的针对数十种项目及语言的 .gitignore 文件列表 https://github.com/github/gitignore.
查看已暂存和未暂存的修改
git diff
git diff --cached
git diff本身只显示尚未暂存的改动,而不是自上次提交以来所做的所有改动。
git diff --cached 查看已经暂存起来的变化。
提交更新
git commit -m "test"
跳过使用暂存区域
git commit -a -m "test"
将已跟踪文件全都提交,不需要add
移除文件
rm README.md
git rm README.md
下次提交时,文件不会纳入版本管理。
如果删除之前修改过并且已经放到暂存区域的话,必须要用强势删除选项 -f(force首字母)
如果想保留本地文件,但是不让git继续跟踪。例如忘记添加.gitignore文件,提交文件到了暂存区域。
git rm --cached README
git rm 后边可以列出文件或者目录,也可以使用glob模式
git rm log/\*.log
删除以~结尾的所有文件
git rm \*~
移动文件
git mv file_from file_to
git mv README.md README
相当于运行了三条命令
mv README.md README
git rm README.md
git add README
查看提交历史
git log
选项:
- git log -p -
显示每次提交的内容差异,-2仅显示最近两次提交 - git log --stat 每次提交的简略的统计信息
- git log --pretty=oneline oneline为内建子选项,另外还有short,full和fuller。
- git log --pretty=format:"%h - %an, %ar : %s"
$ git log --pretty=format:"%h - %an, %ar : %s"
ca82a6d - Scott Chacon, 6 years ago : changed the version number
085bb3b - Scott Chacon, 6 years ago : removed unnecessary test
a11bef0 - Scott Chacon, 6 years ago : first commit
选项 | 说明 |
---|---|
%H | 提交对象(commit)的完整哈希字符串 |
%h | 提交对象的简短哈希字串 |
%T | 树对象(tree)的完整哈希字串 |
%t | 树对象的简短哈希字串 |
%P | 父对象(parent)的完整哈希字串 |
%p | 父对象的简短哈希字串 |
%an | 作者(author)的名字 |
%ae | 作者的电子邮件地址 |
%ad | 作者修订日期(可以用 --date= 选项定制格式) |
%ar | 作者修订日期,按多久以前的方式显示 |
%cn | 提交者(committer)的名字 |
%ce | 提交者的电子邮件地址 |
%cd | 提交日期 |
%cr | 提交日期,按多久以前的方式显示 |
%s | 提交说明 |
- git log --shortstat 只显示 --stat 中最后的行数修改添加移除统计。
- git log --name-only 仅在提交信息后显示已修改的文件清单。
- git log --name-status 显示新增、修改、删除的文件清单。
- git log --abbrev-commit 显示 SHA-1 的前几个字符,而非所有的 40 个字符。
- git log --relative-date 使用较短的相对时间显示(比如,“2 weeks ago”)
- git log --graph 显示 ASCII 图形表示的分支合并历史。
限制输出长度
限制git log输出的选项
选项 | 说明 |
---|---|
-(n) | 仅显示最近的n条提交 |
--since,--after | 仅显示指定时间之后的提交 |
--until,--before | 仅显示指定时间之前的提交 |
--author | 仅显示指定作者相关的提交 |
--committer | 仅显示指定提交者相关的提交 |
--grep | 仅显示指定狗哥关键字的提交 |
-S | 仅显示添加或删除了某个关键字的提交 |
eg:
git log --pretty="%h - %s" --author=gitster --since="2008-10-01" \
--before="2008-11-01" --no-merges -- t/
撤销操作
git commit --amend
将暂存区的文件提交,
eg:
git commit -m "initial commit"
git add forgotten_file
git commit --amend
取消暂存的文件
git reset HEAD
撤销对文件的修改
git checkout --
远程仓库的使用
查看远程仓库
git remote
origin
查看已经配置的远程服务器
git remote -v
origin https://github.com/schacon/ticgit (fetch)
origin https://github.com/schacon/ticgit (push)
添加远程仓库
git remote add
shortname 为指定的简写
从远程库拉取
git fetch [remote-name]
eg:
git fetch origin
推送远程分支
git push origin master
只有当你有所clone服务器的写入权限,并且之前没有人push过时,这条命令才才能生效。否则需要先pull,然后push。
查看远程仓库
git remote show origin
远程仓库的移除与重命名
git remote rename pb paul
同时会修改远程分支名字,过去引用pb/master的现在会引用paul/master
git remote rm paul
移除远程库paul
打标签
列出标签
git tag
可以使用特定模式eg:
git tag -l 'v1.8.5*'
只列出1.8.5系列的标签
创建标签
Git使用两种类型的标签:轻量标签(lightweight)和附注标签(annotated)。 轻量标签本质上是将提交校验和存储到一个文件中 - 没有保存任 何其他信息,附注标签是存储在 Git 数据库中的一个完整对象
附注标签
git tag -a v1.4 -m 'my version 1.4'
轻量标签
git tag v1.4-lw
后期打标签
git tag -a v1.2 9fceb02
共享标签
git push origin v1.2
共享v1.2到远程
git push origin --tags
共享本地所有标签到服务器
checkout 标签
git checkout -b version2 v2.0.0
Git别名
Git并不会在输入部分命令时自动推断出你想要的命令,如果不想每次都输入完整的Git命令,可以通过git config 文件来轻松为每一个命令设置别名
eg:
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 config --global alias.unstage 'reset HEAD --'