Git基础

获取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:

  1. 开始跟踪新文件
  2. 把已跟踪的文件放到暂存区
  3. 合并时把有冲突的文件标记为已解决状态

这个命令可以理解为“添加内容到下一次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 --'

你可能感兴趣的:(Git基础)