标签:抓取数据 查看 服务器端 原因 key 索引 dd命令 idt -name
版本控制器是我们最为常用的工具之一,而GIT又是其中的佼佼者,今天就来总结一下我学习到的那一部分。较为基础,仅适小白解惑,如有任何错误,请帮忙指出谢谢。
1.Git功能理解:
版本控制器其实还是分多种类型的,分类如下:
2.GIT CONFIG配置内容。
3.GIT基础命令行内容的学习:基础的命令行篇,了解了这些其实就可以开始使用git了。这一部分只是简单的介绍和使用,如果想看命令行的复杂用法请看第四部分。
忽略文件配置。在我们的版本库中有的时候会有一些内容是我们不需要纳入版本库的,这个时候我们需要进行一些配置来使git忽略这些的内容。首先创建一个".gitignore"文件,没有后缀名称的哟。然后文件 ".gitignore" 的格式规范如下:
#
开头的行都会被 Git 忽略。/
)开头防止递归。/
)结尾指定目录。!
)取反。*
)匹配零个或多个任意字符;[abc]
匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);问号(?
)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9]
表示匹配所有 0 到 9 的数字)。 使用两个星号(*
) 表示匹配任意中间目录,比如a/**/z
可以匹配 a/z
, a/b/z
或 a/b/c/z
等。具体内容可见:https://github.com/github/gitignore
GIT COMMIT提交更新。课程内容在我们存储到暂存区之后就可以使用git commit命令来进行提交。当然单纯的git commit指令会开启编辑器,需要提交本次更新的说明。当然我们也可以直接在指令后面添加-m “message”,其中的message为我们这一次需要记录的内容。当然咯,如果你觉得使用暂存区在提交的方式比较麻烦的话,并且确定当前的文件修改是你想要的话,则可以使用git commit -a -m “message”,跳过暂存区直接进行提交。有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。 此时,可以运行带有 --amend
选项的提交命令尝试重新提交。当我们在上一次提交之后就进行再一次的提交之间并没有做什么,则那么快照会保持不变,而你所修改的只是提交信息。但是当我们的两次提交之间有信息变动的话如图:则最终你只会有一个提交 - 第二次提交将代替第一次提交的结果。
GIT RM文件删除。我们先尝试一下 rm <file>命令的效果吧如下图。这一命令是删除当前页面的某一文件,虽然标记为deleted,但是其更新操作是未暂存的。。然后我们来试验一下git rm的删除效果:可以发现这时候的删除更新是暂存的,也就是说,下一次的提交将会把这一删除操作一同提交到服务器中。当然我们也可以直接从提交问姜忠直接删除某一文件,只需要使用git rm --cached <file>。当然在删除命令之中也是可以使用glob模式的。表示删除log文件夹中的所有的.log文件。这里的*前面使用\,因为git有自己的文件匹配机制,想用glob模式的话需要\转义。
GIT MV移动文件(就、其实就是文件改名字啦)。其命令行格式如同git mv file_move file_to。这一命令实际上就相当于,mv file_move file_to。然后git rm file_move,最后git add file_to。所以实际上这一操作本质就是一次更名。。。有点无语。
4.GIT进阶篇命令行内容:上面只是讲的是基础的命令行用法,这里将会记录进阶相关的内容(其实就是难一些的命令行,这一部分也会有提到上一部分中所提到的内容,例如commit 的其他用法。)。
GIT LOG 日志查看。重头戏来了,日志是版本控制中的重头戏,其中记录了版本库中的每一版本的每次操作。当我们使用git log命令并且不带任何的参数的时候,git会自动的按照时间的顺序来列出每一个版本内容,如图:
。当然我们也可以在指令后面带入参数,例如-p就表示需要列出每条日志中记录的具体的更新操作,每次commit之后的变化,如图:,当然你可以从图上看见有-2这个参数,这是表示显示就近的两条记录。你也可以为 git log
附带一系列的总结性选项。 比如说,如果你想看到每次提交的简略的统计信息,你可以使用 --stat
选项 如图:
。另外一个常用的选项是 --pretty
。 这个选项可以指定使用不同于默认格式的方式展示提交历史。 这个选项有一些内建的子选项供你使用。 比如用 oneline
将每个提交放在一行显示,查看的提交数很大时非常有用。 另外还有 short
,full
和 fuller
可以用,展示的信息或多或少有些不同,请自己动手实践一下看看效果如何。。但最有意思的是 format,可以定制要显示的记录格式,规则见下列表格:
|
提交对象(commit)的完整哈希字串 |
|
提交对象的简短哈希字串 |
|
树对象(tree)的完整哈希字串 |
|
树对象的简短哈希字串 |
|
父对象(parent)的完整哈希字串 |
|
父对象的简短哈希字串 |
|
作者(author)的名字 |
|
作者的电子邮件地址 |
|
作者修订日期(可以用 --date= 选项定制格式) |
|
作者修订日期,按多久以前的方式显示 |
|
提交者(committer)的名字 |
|
提交者的电子邮件地址 |
|
提交日期 |
|
提交日期,按多久以前的方式显示 |
|
提交说明 |
|
按补丁格式显示每个更新之间的差异。 |
|
显示每次更新的文件修改统计信息。 |
|
只显示 --stat 中最后的行数修改添加移除统计。 |
|
仅在提交信息后显示已修改的文件清单。 |
|
显示新增、修改、删除的文件清单。 |
|
仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。 |
|
使用较短的相对时间显示(比如,“2 weeks ago”)。 |
|
显示 ASCII 图形表示的分支合并历史。 |
|
使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式)。 |
|
仅显示最近的 n 条提交 |
|
仅显示指定时间之后的提交。 |
|
仅显示指定时间之前的提交。 |
|
仅显示指定作者相关的提交。 |
|
仅显示指定提交者相关的提交。 |
|
仅显示含指定关键字的提交 |
|
仅显示添加或移除了某个关键字的提交 |
git checkout -- [file]
是一个危险的命令,这很重要。 你对那个文件做的任何修改都会消失 - 你只是拷贝了另一个文件来覆盖它。 除非你确实清楚不想要那个文件了,否则不要使用这个命令。
git fetch
命令会将数据拉取到你的本地仓库 - 它并不会自动合并或修改你当前的工作。 当准备好时你必须手动将其合并入你的工作。还有就是git pull命令,如果你有一个分支设置为跟踪一个远程分支,可以使用 git pull
命令来自动的抓取然后合并远程分支到当前分支。默认情况下,git clone
命令会自动设置本地 master 分支跟踪克隆的远程仓库的 master 分支(或不管是什么名字的默认分支)。 运行 git pull
通常会从最初克隆的服务器上抓取数据并自动尝试合并到当前所在的分支。之后如果我们想要将我们本地的内容推送到远程库中的话,我们可以使用git push <shortname> <分支名称>命令来进行。当然默认的情况是当前的分支。 然后如果想要查看某一个远程仓库的更多信息,可以使用 git remote show [remote-name]
命令,如图:。如果想要重命名引用的名字可以运行 git remote rename
去修改一个远程仓库的简写名。最后可以通过git remote rm 来进行远程库的删除操作。
GIT TAG标签命令。Git 可以给历史中的某一个提交打上标签,以示重要。
列出标签,直接使用git tag命令可以输出之前所有的设置额标签。当然这样将会输出所有的标签,如果想要查找某一系列的标签,可以使用-l属性,例如这样将会输出所有的与v1.8.5相关的标签内容。
-a
、-s
或 -m
选项,只需要提供标签名字,如图:,这样我们就创建了一个轻量级的标签内容。这时,如果在标签上运行 git show
,你不会看到额外的标签信息。命令只会显示出提交信息。当然如果在之前还没有创建标签的话,实际上我们是可以在之后补上的,当使用git log --pretty=oneline显示出版本日志的时候,这是后我们可以看见每一条日志之前的HASH值,如图:,然后我们可以使用git tag -a <版本名称> <版本hash号前几位>。
!
符号。 如果你自己要写一些与 Git 仓库协作的工具的话,那会很有用。 我们现在演示将git visual定义为gitk 的别名:。
5.分支模块:首先我们来具体说以下相关git数据存储的内容吧,前面已经说过了git以修改内容为基础的并且是以快照的形式来存储内容信息。当我们每一次提交修改后的内容的时候,实际上git会为我们生成一个新的提交对象 ,并使得当前的额提交对象指向一个树对象,并由书对象指向相关的修改内容快照。具体内容如图:其中blob内容是文件快照,而commit是提交保存对象,tree内容是书对象内容。
在每一次的提交的时候我们实际上都有一个这样的提交对象,所以当我们多次提交之后其存储的形式就变成了如图内容:,每一次提交的保存对象将会有一个指针指向其前一次的提交对象(父对象)。理解了这些之后在想理解分之内容就简单多了,因为分支就是指向不同的提交对象的指针变量。当我们初始化的时候的其实就已经有一个自动的指向最新的提交对象的master指针。上图:,线面就来讲一讲关于分之的操作命令吧。
HEAD
的特殊指针。 在 Git 中,它是一个指针,指向当前所在的本地分支(译注:将 HEAD
想象为当前分支的别名)。你可以简单地使用git log 命令查看各个分支当前所指的对象。 提供这一功能的参数是--decorate。当然我们也是可以使用$git checkout -b <filename>这样的命令来进行分支的创建和切换一步完成。还有一种情况之下,如果用户需要删除某一分支的时候我们可以使用git branch -d <filename>。当然给予这么强大的命令行内容,git branch是可以用来显示分支信息的。注意某一分支前的 *
字符:它代表现在检出的那一个分支(也就是说,当前HEAD指针所指向的分支)。和可以为当前的额命令添加-v属性进行信息的输出,这样的话我们可以查看到更多的信息。当然还有git branch的很多的其他的用法,可以添加--help属性来查看命令行的使用方式。
合并分支:当我们有多个分支进行工作的时候,我们实际上是可以通过分支合并的功能来进行分支版本归一的,分支合并的内容是($git merge命令)。
在我们使用合并功能的时候,如果我们所需要合并的分支是被合并分支的上游则合并分支实际上所执行的操作就是向前移动指向位置,这时候的操作名字称为(快进“fast-forward”)。
但是当我们所需要合并的分支并不是被合并分支的上游内容的时候,出现这种情况的时候,Git 会使用两个分支的末端所指的快照以及这两个分支的工作祖先,做一个简单的三方合并。例如我现在有一个issu53需要进行合并情况如图:Git 将此次三方合并的结果做了一个新的快照并且自动创建一个新的提交指向它。 这个被称作一次合并提交,它的特别之处在于他有不止一个父提交。最后得到的结果如图:
experiment
、变基操作的目标基底分支 master
)的最近共同祖先C2,然后对比当前分支相对于该祖先的历次提交,提取相应的修改并存为临时文件,然后将当前分支指向目标基底 C3
, 最后以此将之前另存为临时文件的修改依序应用。所以最后变基操作完成的时候版本库内容会变成如图:,最后的最后我们回到master分支之中并进行合并。这样就可以得到最终结果:。变基和合并这两种整合方法的最终结果没有任何区别,但是变基使得提交历史更加整洁。 你在查看一个经过变基的分支的历史记录时会发现,尽管实际的开发工作是并行的,但它们看上去就像是先后串行的一样,提交历史是一条直线没有分叉。
标签:抓取数据 查看 服务器端 原因 key 索引 dd命令 idt -name
原文地址:http://www.cnblogs.com/pingchuanxin/p/6092998.html