以及对git基本原理的敞亮,那么您暗中同意的长途分支名字将会是 booyah/master

前言

  那篇小说首假诺介绍作者在利用Git中的有局地忘记了,可是很要紧的下令。


20171127更新

前不久做事平常选用Git,本文重点总括归咎一下git经常使用的授命和用法,以及对git基本原理的敞亮。

分支

翻看种种分支所指的近期目的

git log --oneline --decorate

图片 1

git log --oneline --decorate --graph --all //输出你的提交历史,各个分支的指向,以及项目分支分叉的情况

git merge [branchname] 把 branchname 合并到当前分支

① 、Git安装后安排

欣逢冲突时分支的联合

图片 2

其余因涵盖合并争执而有待消除的文书,都会以未合并状态标识出来。 Git
会在有争执的文本中进入正规的抵触解决标记,那样您能够打开那么些含有冲突的文书然后手动消除争辨。
出现争辩的文本会蕴藏部分格外区段,看起来像下边那么些样子:

<<<<<<< HEAD:index.html <div id="footer">contact : email.support@github.com</div> ======= <div id="footer">  please contact us at support@github.com </div> >>>>>>> iss53:index.html 

图片 3

那象征 HEAD 所提醒的本子(也便是您的 master 分支所在的职位,因为你在运行merge 命令的时候曾经济检察出到了这些分支)在这几个区段的上半有个别( =======
的上半有的),而 所要合并分支所提示的版本在 ======= 的下半部分。
为了缓解争执,你无法不选用使用由 =======
分割的两部分中的二个,恐怕您也得以活动合并那个内容。
例如,你能够通过把那段内容换来上边包车型大巴旗帜来化解顶牛:

图片 4

1.1 用户音讯

设置后要做的第2件事正是设置你的用户名和邮箱地址,因为每三个 Git
的付出都会动用那一个新闻,并且它会写入到你的每三遍提交中,不可改变:

$ git config --global user.name "adonfu"
$ git config --global user.email adon@example.com
  • 若使用–global 选项,该命令只须要周转3回,Git 都会动用那些音讯;
  • 若针对一定项目应用区别的用户名称与邮件地址时,能够在老大项目目录下运作没有–global
    选项的下令来安插。

翻开每三个分段的终极一次提交

git branch -v 

git branch --merged / --no-merged  查看已经合并或者未合并的分支


git branch -d / -D(强制删除)

1.2 Git配置消息存款和储蓄在多少个不等的地点

  • /etc/gitconfig 文件: 包涵系统上每一个用户及她们仓库的通用配置
    若git config 使用选用 –system 时,会从此文件读写配置变量。
  • ~/.gitconfig 或 ~/.config/git/config 文件:只针对当下用户
    若采纳 –global 选项,Git读写此文件。
  • .git/config:当前仓库。

每贰个级别覆盖上拔尖其余配置,所以 .git/config 的布局变量会覆盖
/etc/gitconfig 中的配置变量。

Origin 并无特殊含义

长距离仓库名字 origin 与分支名字 master 一样,在 Git
中并没有其余尤其的意思一样。 同时 master 是当您运维 git init
时暗许的开局分支名字,原因仅仅是它的周边使用, origin 是当您运营 git
clone 时默许的长距离仓库名字。 假若你运维 git clone -o booyah
,那么您默许的长途分支名字将会是 booyah/master 。

2017 11 23 更新

1.3 查看配置新闻

$ git config --list

翻开文件提交历史

git log
git log -p //显示每次提交的内容差异
git log --stat  //显示每次提交的简略的统计信息
git log --pretty=format:"%h - %an, %ar : %s"

图片 5

图片 6

限制出口长度

git log --sine=2.weeks
git log -<n> 显示 前 n 条提交
git log --author 指定作者的提交
git log -SFunctionName 可以列出那些添加或移除了某些字符串的提交

图片 7

贰 、基本命令

裁撤有关操作

撤销刚刚的1个交给

git commit --amend //由于commit 信息写错,好像经常用

1. 获取Git仓库

有二种情势取得Git项目仓库。

撤消暂存文件

当您使用 git add *
时,发现添加了不该暂存的文本,可以用上边包车型客车来撤废暂存

git reset HEAD <file>

git checkout -- <file> //取消对一个未加入暂存区文件的修改

1.1 在现有项目或目录下导入全体文件到Git中

若目录gitCmdTest已创造,执行如下命令:

$ cd gitCmdTest
$ git init

若要初步化3个新的版本库~/gitCmdTest/.git/:

$ git init gitCmdTest

长途仓库

添加一个远程仓库
git remote add <shortname> <url>
git remote add pb https://github.com/paulboone/ticgit

从远程仓库抓取与拉取

git fetch [remote-name] //git fetch origin


git push [remote-name] [branch-name]


查看远程仓库
git remote show [remote-name]

远程仓库的移除与重命名
git remote rename <originName> <afterName>

git remote rm <remote-name>

1.2 从二个服务器克隆2个现有的Git仓库

仿造仓库的通令格式是git clone [url]

$ git clone https://github.com/fuyadong/firstProject

在当前目录下创办3个firstProject目录,在那么些目录下早先化3个.git文本夹,保存远程仓库的具有数据。
若将长途仓库自定义本地仓库:

$ git clone https://github.com/fuyadong/firstProject myproject

标签

git tag 列出标签

Git 使用两种首要类型的标签: 轻量标签(lightweight) 与
附注标签(annotated)。

二个轻量标签很像三个不会变动的分支-它只是3个一定提交的引用。

附注标签是储存在Git数据库中的多少个完整对象。它们是可以被校验的;个中带有打标签者的名字、电子邮件地址、日期时间;还有1个标签消息;并且可以行使GNU
Privacy Guard (GPG) 签名与认证。

1.3 将文件放入版本库

$ touch file1.py    #创建文件file1
$ touch file2.py     #创建文件file2
$ git add .     #将当前路径下所有修改/新增的文件加入代码库
$ git add file1.py file2.py #单个文件添加
$ git add LICENSE
$ git commit -m 'some message'  #提交代码
$ git diff          #比较当前修改的文件与之前的区别
$ git status        #查看状态

附注标签

git tag -a v1.4 -m 'my version 1.4'

git show 可以看到标签信息对应的提交信息

1.4 设置忽略文件

多少公文无需纳入Git
的管住,也不期待它们总出现在未跟踪文件列表。平常都以些自动生成的文件,比如日志文件,大概编译过程中创立的权且文件等。

轻量标签

git tag v1.4-lw

1.4.1 设置任何项目要不经意的文本

在根目录新建一个文书.gitignore,列出要不经意的文本情势。

$ touch .gitignore
$ echo *.[oa] > .gitignore
$ echo *~ > .gitignore

.gitignore文件参预版本库并交给。

给在此之前的付出打标签

git tag -a v1.2 9fsdfdasfa  某个提交的校验和的值

1.4.2 设置自身项目要不经意的文件

修改.git/info/exclude文件,设置要不经意的公文:

*.[oa]
*~

还足以忽略 log,tmp 也许 pid 目录,以及自动生成的文书档案等。

推送标签

git push origin v1.2 推送指定标签

git push origin --tags 一次性推送把所有不在远程仓库服务器上的标签全部推送过去

在特定标签上创建一个新分支
git checkout -b [branchname] [tagname]
git checkout -b version2 v3.3.0

1.4.3 .gitignore 的格式规范

格式规范如下:

  • 抱有空行或然以 # 开首的行都会被 Git 忽略。
  • 能够采纳正规的 glob 格局匹配。
  • 相当形式能够以(/)开首幸免递归。
  • 合营形式能够以(/)结尾内定目录。
  • 要不经意钦命方式以外的公文或目录,能够在格局前增加感叹号(!)取反。

glob 格局是简化的 shell 正则表明式:

  • 星号(*)匹配零个或多少个随机字符;
  • [abc] 匹配任何一个列在方括号中的字符;
  • 问号(?)只十分四个随机字符;
  • 在方括号中选拔短划线分隔三个字符,表示拥有在那五个字符范围内的都能够同盟(比如
    [0-9] 表示突出全体 0 到 9 的数字;
  • 应用三个星号(*) 表示万分任意中间目录,比如a/**/z 可以匹配 a/z,
    a/b/z 或 a/b/c/z等。

今非昔比门类及言语的.gitignore文件列表gitignore

怎么跳转到钦定的 commit

  难题讲述:
比如笔者认为眼下支行大概不适合线上的,那么笔者急需来三个更为安全的分层?

实现:

git checkout -b new-branch commitId

对 指定的 CommitId始建新支行。

2. 地方操作

仿造远程仓库的时候自定义本地仓库名字

git clone http://github.com/xx myName

2.1 提交操作

使用git add建立跟踪,将修改或新增的文书添加到暂存区:

$ git add file1.py

选用git status查询暂存状态:

$ git status

若不想暂存文件file1.py,运营如下命令撤出暂存区:

$ git reset HEAD file1.py

后悔操作:

$ git reset HEAD^    # 恢复到上一个版本
$ git reset HEAD^ file1.py   # 将文件回退到上一个版本
$ git reset -soft HEAD~n    # 回退到第n个版本
$ git reset <object key>    # 回退到具体的提交对象
$ git reset -hard origin/master  # 将本地状态与远程master库一致

将暂存区的剧情提交更新:

$ git commit -m 'msg'

付给时记下的是放在暂存区域的快速照相。任何还未暂存的依旧维持已修改景况,能够在下次提交时纳入版本管理。每一遍运营提交操作,都以对您项目作3遍快照,现在能够回去那么些场所大概拓展比较。

若已跟踪的文本被涂改,能够采纳参数-a将修改的文书暂存并交由:

$ git commit -a -m 'msg'

选用 git status -s 能够望见状态的简写版本,如下所示

图片 8

2.2 移除文件

若要删除已暂存的公文(从暂存区移除):

$ rm file.py
$ git rm file.py

再交付时,文件file.py就不会纳入到版本管理。

若要将曾经交由到版本库中的文件移除,但愿意保留在当前工作目录中,使用选用--cached

$ git rm --cached file.py

手动删除,将文件撤出暂存区:

$ rm file.py

能够利用git status取名查看情状。

文本重命名操作:

$ git mv filename.py file.py

绝对于如下操作:

$ mv filename.py file.py
$ git rm filename.py
$ git add file.py

查阅已暂存的文件差距相比

从前一贯不亮堂,当暂存之后选用 git diff 就不算了,今日察觉竟然还有这一个
(在未 commit 的图景下!)

git diff --cached
git diff --staged

2.3 工作区文件状态

办事目录下各样文件有八个状态:已跟踪或未跟踪。

  • 已跟踪的公文:被纳入了版本控制的文件,在上3遍快速照相中有它们的笔录,在干活一段时间后,它们的动静或者处于未修改,已修改或已放入暂存区。
  • 未跟踪文件:除已跟踪的文本以外的具有其余文件。它们既不设有于上次快速照相的记录中,也从未放入暂存区。
  • 初次克隆的堆栈,工作目录中的全部文件都属于已跟踪文件,并处在未修改状态。

文本状态变化:

图片 9

git add 建立跟踪,放入暂存区;
git commit 将暂存区中的文件纳入到版本管理;

移除文件

先是先选取 rm filename 然后再使用 git rm filename 举办记录。

其余一种景况是,我们想把公文从 Git
仓库中去除(亦即从暂存区域移除),但仍然期待保留在当前工作目录中。
换句话说,你想让文件保留在磁盘,不过并不想让 Git 继续跟踪。 当你忘掉添加
.gitignore 文件,十分大心把三个十分大的日记文件或一堆 .a
那样的编写翻译生成文件添加到暂存区时,这一做法越来越有用。
为完成这一目标,使用 –cached 选项

git rm --cached deleteName

图片 10

2.4 打消操作

若漏提文件或提交音讯写错,能够选拔参数–amend重复提交:

$ git commit --amend

示例:

$ git commit -m 'initial commit'
$ git add some_file
$ git commit --amend

最终只有3个付出 – 第三遍提交将代替第3回提交的结果。
裁撤对文本的改动:

$ git checkout -- file.py
$ git checkout HEAD file.py
$ git checkout HEAD *.py
$ git checkout HEAD .

3. 远程仓库操作

3.1 成立远程仓库

  • 能够通过github始建几个远程仓库,使用git clone一声令下克隆版本库。

git clone https://github.com/fuyadong/firstProject

机动抬高的布局消息,通过命名git config --list查看。

  • 由此命令行成立版本库:

$ git remote add origin remote_git_server_address

呈现远程仓库的名字和UCR-VL:

$ git remote -v

3.2 从远程仓库中抓取与拉取

从远程仓库中收获多少:

$ git fetch [remote-name]

若版本库通过git clone指令获取,仓库名称remote-name默许为origin。

3.3 推送到长途仓库

命令格式:git push [remote-name] [branch-name]
首先保险克隆服务器有写入权限。

$ git push origin master

若版本库使用任何名目pub:

$ git remote add pub https://github.com/fuyadong/firstProject
$ git push -u pub master

-u代表使用有些远程仓库,默许的远程库,设置一次即可。

3.4 查看远程仓库

$ git remote show origin

3.5 远程仓库重命名和移除

$ git remote rename pub publish
$ git remote rm publish

4 分支

Git分支是指向提交对象的可变指针,暗中认可分支名字是master,始终本着最新的交给对象,自动向前移动。与其它分支完全无差异,由git init命令暗中同意创立。
非同小可指针HEAD:指向工作空间当前所在的本土分支,那样Git就知道当前是在哪个分支上。

4.1 创制分支

$ git branch dev

开创二个新支行dev,并不会活动切换成新支行中去。
翻看分支当前所指对象:

$ git log --oneline --decorate

查看分叉历史:

$ git log --oneline --decorate --graph --all

能够看出提交历史、种种分支的针对以及项目标分层分叉意况。

4.2 切换分支

切换来支行dev:

$ git checkout dev

新建并切换分支:

$ git checkout -b dev

4.3 删除分支

$ git branch -d dev

4.4 分支管理

$ git branch      # 查看本地分支
$ git branch -r  # 查看远程分支
$ git branch -v  # 查看每个分支的最后一次提交

翻看哪些分支已经统一到近期支行:

$ git branch --merged

翻开全部包括未合并工作的分段:

$ git branch --no-merged

4.5 合并分支

将分支dev合并入master分支:

$ git checkout master
$ git merge dev

4.6 消除统一顶牛

Git在发生争辩的文书中会到场正规的争持消除标记,能够手动消除抵触,如下一段内容:

<<<<<<< HEAD:index.html
<div id="footer">contact : email.support@github.com</div>
=======
<div id="footer">
 please contact us at support@github.com
</div>
>>>>>>> dev:index.html

在======= 的上半部分是HEAD 所提醒的本子,即HEAD所在的道岔;在 =======
的下半部分,是dev分支所提醒的本子;那是足以采纳部分保留,也可手动消除争论,然后删除争执标记。使用git add命令标记顶牛已消除。

4.7 远程分支

4.7.1 跟踪分支

在长距离跟踪分支基础上,建立地点分支:

$ git checkout -b dev origin/dev

本地分支dev自动从origin/dev拉取,命令格式:git checkout -b [分支名]
[远程名]/[分支名]。

盯住分支:从一个长途跟踪分支检出2个地方分支会自动创设3个叫做
“跟踪分支”(有时候也叫做 “上游分支”)。
跟踪分支是与远程分支有一贯关系的本土分支。
在一个跟踪分支上进行:
git push命令:Git会自行估计应该向哪些服务器的哪位分支推送数据;
git pull指令:Git能自动地辨别去哪个服务器上抓取、合并到哪些分支。
在执行git clone时,Git平日会活动创设七个名为master的分支来跟踪origin/master

4.7.2 查看设置的具备跟踪分支

$ git branch -vv

列出全体地方分支及其各类分支正在跟踪哪个远程分支。

4.7.3 推送分支

$ git push origin master

将master分支推送到长途仓库origin上。

4.7.4 获取服务器数据

$ git fetch

从服务器上抓取本地没有的数据,并不会师并;须求举办git merge命令。

4.7.5 删除远程分支

$ git push origin --delete remote_branch

5 标签

能够动用打标签效应来标记发表节点,比如公布版本的时候。也能够为某些提交打标签。

5.1 查看标签

$ git tag
$ git tag -l 'v2.0*'

5.2 创造标签

创立附注标签:

$ git tag -a v2.0 -m 'my version 2.0'

由此接纳git show命令能够见到标签消息与相应的交付消息。

轻量标签本质上是将交给校验和仓库储存到3个文本中,没有保存任何其余音信。创设轻量标签,不需求动用-a-s
-m挑选,只必要提供标签名字:

$ git tag v2.0-lw

轻量标签和附注标签差距:
三个轻量标签很像2个不会改变的道岔,它只是2个一定提交的引用。
附注标签是储存在Git数据库中的3个整机对象。它们是足以被校验的;在那之中饱含打标签者的名字、电子邮件地址、日期时间和标签新闻。日常使用附注标签,那样能够看来以上信息。

5.3 早先时期打标签

能够为事先的提交打标签:

$ git log --pretty=oneline
$ git tag -a v1.2 8fceb05
$ git show v1.2

5.4 共享标签

暗许情状下,git push指令并不会传送标签到长途仓库服务器上,在开立完标签后你不能不显式地推送标签到共享服务器上。

$ git push origin v1.2

将不再远程仓库服务器上的价签全体推送到服务器上:

$ git push origin --tags

听大人说特定的价签版本创造贰个支行:

$ git checkout -b dev v2.0

指令格式:git checkout -b branch tag

三 、Git基本原理

Git不仅仅是三个版本控制系统,它同时是3个老大强劲且易用的工具,是二个剧情寻址文件系统。那里只介绍Git内部的对象,以更好的明亮地点的通令。

Git对象

多少个目的模型:

  • blob对象:保存文件快速照相
  • Tree对象:记录目录结构和blob对象索引
  • 交由对象:包蕴树对象指针和交给音信

交给音信有作者的全名和邮箱、提交时输入的新闻以及针对它的父对象的指针。第②回提交发生的交由对象没有父对象,普通提交操作发生的提交对象有三个父对象,而由多少个支行合并发生的交给对象有八个父对象。

施行二遍git commit交给操作,Git会先总结每一个子目录的校验和,然后在
Git 仓库中这么些校验和封存为树对象。 随后,Git
便会创建一个付出对象,对版本库做3遍快速照相。

图片 11

能够利用如下命令查询提交音信:

$ git log  # 获取提交记录
$ git ls-tree <object key>  # 查看指定对象所有信息
$ git cat-file -p <object key>  # 获取key对应object的内容,根据object里面的内容,继续探索,访问到所有关联object。

参考资料:
[1]: git book官网 Git
Book

相关文章