当前位置:   article > 正文

Git学习之基础_committed 3 minutes ago

committed 3 minutes ago

目录

1.Git的三种状态

1.1 已提交(committed)

1.2已修改(modified)

1.3已暂存(staged)

 跳过使用暂存区域

移除文件

移动文件 

 查看提交历史

撤消操作 

取消暂存的文件

撤消对文件的修改 

1.4远程仓库的使用

从远程仓库中抓取与拉取

推送到远程仓库 

查看远程仓库 

远程仓库的移除与重命名 

打标签 

列出标签 

创建标签 

附注标签 

轻量标签 

后期打标签

共享标签 

 2.基本地Git工作流程

3.获取Git目录

3.1在现有目录中初始化仓库

3.2忽略文件


1.Git的三种状态

1.1 已提交(committed)

已提交表示数据已安全地保存到本地数据库中

1.2已修改(modified)

已修改表示修改了文件,但还没有保存到数据库中

1.3已暂存(staged)

已暂存表示对一个已修改文件地当前版本做了标记,使之包含在下次提交地快照

  1. git status #文件状态查询
  2. git status -s 或者 git status --short #状态报告更紧凑
  3. git diff # 看暂存前后的变化

 

 跳过使用暂存区域

尽管使用暂存区域的方式可以精心准备要提交的细节,但有时候这么做略显繁琐。Git    提供了一个跳过使 用暂存区域的方式,只要在提交的时候,给 git  commit  加上  -a    选项,Git  就会自动把所有已经跟 踪过的文件暂存起来一并提交,从而跳过  git    add  步骤,在提交时,可以给本次的修改添加说明,方便后续查看,例如:git  commit    -m    "182: add note " 

移除文件

要从 Git  中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提 交。可以用  git  rm    命令完成此项工作,并连带从工作目录中删除指定的文件,这样以后就不会出现在未跟踪文件清单中了。

如果删除之前修改过并且已经放到暂存区域的话,则必须 要用强制删除选项    -f (译注:即    force    的首字母)。这是一种安全特性,用于防止误删还没有添加到快照的数据,这样的数据不能被    Git    恢复。
另外一种情况是,我们想把文件从  Git  仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作 目录中。换句话说,你想让文件保留在磁盘,但是并不想让 Git  继续跟踪。当你忘记添加    .gitignore 文件,不小心把一个很大的日志文件或一堆    .a    这样的编译生成文件添加到暂存区时,这一做法尤其有 用。为达到这一目的,使用    --cached ,例如

移动文件 

要在    Git    中对文件改名,可以这么做:

git	mv file_from file_to

git    mv    就相当于运行了下面三条命令:

  1. mv README.md README #重命名文件
  2. git rm README.md #删除老文件名
  3. git add README #添加新文件名

 查看提交历史

 git    log    会按提交时间列出所有的更新,最近的更新排在最上面。

git    log    有许多选项可以帮助你搜寻你所要找的提交,接下来我们介绍些最常用的。
一个常用的选项是    -p ,用来显示每次提交的内容差异。你也可以加上    -2    来仅显示最近两次提交。

如果你想看到每次提交的简略的统计信息,你可以使用    --stat    选项。
另外一个常用的选项是    --pretty 。这个选项可以指定使用不同于默认格式的方式展示提交历史。这个 选项有一些内建的子选项供你使用。比如用    oneline    将每个提交放在一行显示,查看的提交数很大时 非常有用。另外还有    short , full    和    fuller    可以用,展示的信息或多或少有些不同。
但最有意思的是    format,可以定制要显示的记录格式。这样的输出对后期提取分析格外有用 — 因为你知 道输出的格式不会随着Git的更新而发生改变

             下表为常用的格式占位符写法及其代表的意义

                                                                         git   log    的常用选项

另外还有按照时间作限制的选项,比如    --since    和    --until    也很有用。例如,下面的命令列出所有 最近12年内的提交

这个命令可以在多种格式下工作,比如说具体的某一天  "2008-01-15" ,或者是相对地多久以前    "12   years   1   day   3    minutes   ago" 。
还可以给出若干搜索条件,列出符合的提交。用    --author    选项显示指定作者的提交,用    --grep    选 项搜索提交说明中的关键字。(请注意,如果要得到同时满足这两个选项搜索条件的提交,就必须用    --all-match    选项。否则,满足任意一个条件的提交都会被匹配出来)
另一个非常有用的筛选选项是    -S ,可以列出那些添加或移除了某些字符串的提交。比如说,你想找出添 加或移除了某一个特定函数的引用的提交,你可以这样使用:
$    git    log    -Sfunction_name
最后一个很实用的    git    log    选项是路径(path),如果只关心某些文件或者目录的历史提交,可以在    git log    选项的最后指定它们的路径。因为是放在最后位置上的选项,所以用两个短划线(--)隔开之前的选 项和后面限定的路径名。

                                                 限制    git    log    输出的选项 

撤消操作 

有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。此时,可以运行带有    --amend    选项的提交命令尝试重新提交,最终你只会有一个提交 , 第二次提交将代替第一次提交的结果。 

取消暂存的文件

你已经修改了两个文件并且想要将它们作为两次独立的修改提交,像下面这样,你意外地输入了    git    add    *    暂存了它们两个。如何只取消暂存两个中的一个呢? 


 在    “Changes    to    be    committed”    文字正下方,提示使用    git    reset    HEAD    <file>...    来取消暂存。所以,我们可以这样来取消暂存  a.c  文件

撤消对文件的修改 

 如果你并不想保留对   a.c   文件的修改怎么办?你该如何方便地撤消修改,将它还原成上 次提交时的样子(或者刚克隆完的样子,或者刚把它放入工作目录时的样子)?  可以使用  git    checkout    --    [file] 命令,但这是一个危险的命令,除非你确实清楚不想要那个文件了,否则不要使用这个命令。

1.4远程仓库的使用

如果想查看你已经配置的远程仓库服务器,可以运行    git    remote    命令。它会列出你指定的每一个远程 服务器的简写。如果你已经克隆了自己的仓库,那么至少应该能看到    origin    -    这是    Git    给你克隆的仓库服 务器的默认名字.也可以指定选项    -v ,会显示需要读写远程仓库使用的    Git    保存的简写与其对应的    URL。

从远程仓库中抓取与拉取

如果你使用    clone    命令克隆了一个仓库,命令会自动将其添加为远程仓库并默认以    “origin”    为简 写。所以, git    fetch    origin    会抓取克隆(或上一次抓取)后新推送的所有工作。必须注意    git    fetch    命令会将数据拉取到你的本地仓库    -    它并不会自动合并或修改你当前的工作。当准备好时 你必须手动将其合并入你的工作。

使用    git    pull    命令来自动的抓取然后合并远程分支到当前分支。这对你来说可能是一个更简单或更舒服的 工作流程;默认情况下, git    clone    命令会自动设置本地    master    分支跟踪克隆的远程仓库的    master 分支(或不管是什么名字的默认分支)。运行    git    pull    通常会从最初克隆的服务器上抓取数据并自动 尝试合并到当前所在的分支。 

推送到远程仓库 

当你想分享你的项目时,必须将其推送到上游。这个命令很简单: git    push    [remote-name]    [branch-name] 。当你想要将    master    分支推送到    origin    服务器时 (再次说明,克隆时通常会自动帮你设置好那两个名字),那么运行这个命令就可以将你所做的备份到服 务器:

git	push	origin	master

只有当你有所克隆服务器的写入权限,并且之前没有人推送过时,这条命令才能生效。当你和其他人在同 一时间克隆,他们先推送到上游然后你再推送到上游,你的推送就会毫无疑问地被拒绝。你必须先将他们 的工作拉取下来并将其合并进你的工作后才能推送。

查看远程仓库 

如果想要查看某一个远程仓库的更多信息,可以使用    git    remote    show    [remote-name]    命令。如 果想以一个特定的缩写名运行这个命令,例如    origin ,会得到像下面类似的信息

远程仓库的移除与重命名 

如果想要重命名引用的名字可以运行    git    remote    rename    去修改一个远程仓库的简写名。例如,想 要将    pb    重命名为    pa,可以用    git    remote    rename  pb pa

如果因为一些原因想要移除一个远程仓库, 你已经从服务器上搬走了或不再想使用某一个特定的镜像了, 又或者某一个贡献者不再贡献了 ,例如,移除pa,可以使用    git    remote    rm pa

打标签 

列出标签 

在    Git    中 用 git    tag 列出已有的标签

也可以使用特定的模式查找标签。例如,Git    自身的源代码仓库包含标签的数量超过    500    个。如果只对 1.8.5    系列感兴趣,可以运行:    git    tag    -l    'v1.8.5*' 

创建标签 

Git    使用两种主要类型的标签:轻量标签(lightweight)与附注标签(annotated)。一个轻量标签很像一个不会改变的分支    -    它只是一个特定提交的引用。然而,附注标签是存储在    Git    数据库中的一个完整对象。它们是可以被校验的;其中包含打标签者的名 字、电子邮件地址、日期时间;还有一个标签信息;并且可以使用    GNU    Privacy    Guard    (GPG)签名与 验证。通常建议创建附注标签,这样你可以拥有以上所有信息;但是如果你只是想用一个临时的标签,或 者因为某些原因不想要保存那些信息,轻量标签也是可用的。 

附注标签 

最简单的方式是当你在运行    tag    命令时指定    -a    选项,如:    git    tag    -a    v1.4    -m    'my    version    1.4' 

-m    选项指定了一条将会存储在标签中的信息。如果没有为附注标签指定一条信息,Git    会运行编辑器要 求你输入信息。
通过使用    git    show    命令可以看到标签信息与对应的提交信息

轻量标签 

另一种给提交打标签的方式是使用轻量标签。轻量标签本质上是将提交校验和存储到一个文件中    -    没有保 存任何其他信息。创建轻量标签,不需要使用    -a 、 -s    或    -m    选项,只需要提供标签名字:git    tag    v1.4-lw 

现在我们运行git show v1.4-lw不会看到打标签者的相关信息,只会显示出提交信息

后期打标签

 可以对过去的提交打标签。假设提交历史是这样的:

现在,假设在    v1.2    时你忘记给项目打标签,也就是在    “removed unnecessery test code”    提交。你可以在之后补上标 签。要在那个提交上打标签,你需要在命令的末尾指定提交的校验和(或部分校验和):


 现在可以看到那一次的提交打上了标签

共享标签 

默认情况下, git    push    命令并不会传送标签到远程仓库服务器上。在创建完标签后你必须显式地推送 标签到共享服务器上。这个过程就像共享远程分支一样    -    你可以运行    git    push    origin    [tagname] 。如果想要一次性推送很多标签,也可以使用带有  --tags  选项的  git  push  命令。这将会把所有不在 远程仓库服务器上的标签全部传送到那里(  git  push  origin  --tags

 2.基本地Git工作流程

1.    在工作目录中修改文件。
2.    暂存文件,将文件的快照放入暂存区域。
3.    提交更新,找到暂存区域的文件,将快照永久性存储到    Git    仓库目录。

3.获取Git目录

3.1在现有目录中初始化仓库

在现有项目地目录下输入

$ git init

3.2忽略文件

一般我们总会有些文件无需纳入    Git    的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生 成的文件,比如日志文件,或者编译过程中创建的临时文件等。在这种情况下,我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件模式。文件格式如下,要忽略其它日志、编译的临时文件可以按照这个格式编写

  1. *.[oa] //告诉Git忽略所有以.o 或.a结尾的文件
  2. *~ //告诉Git忽略所有以波浪符(~)结尾的文件

 文件 .gitignore  的格式规范如下:
所有空行或者以    #    开头的行都会被    Git    忽略。
可以使用标准的    glob    模式匹配。
匹配模式可以以( / )开头防止递归。
匹配模式可以以( / )结尾指定目录。
要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号( ! )取反。
所谓的   glob   模式是指  shell  所使用的简化了的正则表达式。星号( * )匹配零个或多个任意字符; [abc]    匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);问号( ? )只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字 符范围内的都可以匹配(比如  [0-9]  表示匹配所有  0  到  9  的数字)。使用两个星号( * )    表示匹配任意中间目录,比如 a/**/z    可以匹配   a/z ,   a/b/z   或   a/b/c/z 等。

https://github.com/github/gitignore 有一个十分详细的针对数十种项目及语言的  .gitignore  文件列表。


本文参考书目:Pro+Git+第二版(中文版)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/558094
推荐阅读
相关标签
  

闽ICP备14008679号