码迷,mamicode.com
首页 > 其他好文 > 详细

git基础

时间:2018-05-02 13:32:58      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:alias   scott   git使用   存在   show   1.2   删除   查看   现在   

一、 获取git仓库 :两种方法
  第一种:在现有项目或目录下导入所有文件到git中
    1.在终端进入项目目录 cd ..
    运行git init 来初始化git仓库
    2.在已经存在文件的文件夹中初始化git仓库
    git Add *.C
    git Add License
    git Commit -M "Initial Project Version"
    git add命令用来实现对指定文件的跟踪,然后执行git commit提交

  第二种:从服务器克隆一个现有的git仓库
    git clone https://github.com/woailuo2015/git.git

二、记录每次更新到仓库
  1.工作目录下的给个文件只有两种状态:已跟踪或未跟踪
    已跟踪的文件:指被纳入版本控制的文件,在上一次快照中有他们的记录,在工作一段时间后,他们的状态可能处于未修改,已修改或已放入缓存区。
    未跟踪的文件:除了已跟踪的文件之外的其他文件都是未跟踪的文件,它们即不存在于上次快照的记录中,也没有存放暂存区。

    初次克隆某个仓库的时候,工作目录中的所有文件都是属于已跟踪文件,并处于未修改状态。


  2.检查当前文件状态
    git status -s
  新添加的未跟踪文件前面有??标记
  新添加到暂存区中的文件前面有A标记
  修改过的文件前面有M标记(M有两个可以出现的位置:
  右边的M表示该文件被修改了但是没有放到暂存区,
  左边的M表示该文件被修改了并放到了暂存区)

  3.
  跟踪新文件 git add
  暂存已修改文件 git add
  在提交commit 文件之前,不管你修改多少次这个文件,最后提交的都是你最后git add的这个文件(最新的文件)

  4.忽略文件:cat .gitignore
  我们创建一个 .gitignore文件,在里面列出要忽略的文件模式。

  文件 .gitignore的格式规范如下:
    所有空行或者以#开头的行都会被git忽略;
    可以使用标准的glob模式匹配;
    匹配模式可以以(/)开头防止递归;
    匹配模式可以以(/)结尾指定目录;
    要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反;


  GitHub 有一个十分详细的针对数十种项目及语言的 .gitignore 文件列表,你可以在 https://github.com/github/gitignore 找到它.

  3.查看已暂存和未暂存的修改
    git diff
  此命令比较的是工作目录中当前文件和暂存区快照之间的差异,也就是修改之后还没有暂存起来的变化内容。

    git diff --cached
    git diff --staged
  这两个命令效果相同

  4.提交更新git commit
    每次准备提交前,先用git status看一下是不是都已经暂存起来了,被一切修改过的或者新建的文件都git add过,就可以提交了。

    git commit -m " 内容"
    这个命令可以提交信息
  提交后它会告诉你,这次提交中有多少文件修改过,多少行添加和删除过。

    请记住:提交时记录的是放在暂存区的快照。任何还未暂存的仍然保持已修改状态,可以在下次提交时纳入版本管理。每一次运行提交操作,都是对你项目做一次快照,以后回到这和状态,或者进行比较。

  5.跳过使用暂存区域
    git commit -a
  尽管使用暂存区的方式可以精心准备要提交的细节,但是有时候这么做略显繁琐。所以Git提供了一个跳过使用暂存区域的方式,只要在提交的时候,给git commit 加上-a选项,git就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过git add步骤;

  6.移除文件
    git rm
  这个命令后面可以列出文件或者目录的名字

    git rm --cached
  这个命令作用:移除git仓库中的文件,也就是让文件保存在磁盘,但是不想让git继续跟踪。

  7.移动文件
  重命名:在git中对文件改名,可以这么做:
      git mv file_from file_to

  实际运行git mv file_from file_to命令就相当于运行了下面三条命令:
    mv file_from file_to
    git rm file_from
    git add file_to


  8.查看提交历史 git log

  默认不用任何参数的话,git log 会按提交时间列出所有的更新,最近的更新排在最上面。

    git log -p -2
  用来显示每次提交的内容差异

    git log --stat
  可以看到每次提交的简略的统计信息

    git log --pretty=oneline 或者short 或者full 或者fuller
  指定使用不同于默认的方式展示提交历史

    git log --pretty=format:"%h - %an, %ar : %s"
  可以定制要显示的记录格式。

    git log --pretty=format常用的选项列出了常用的格式占位符写法及其代表的意义。 Table 1. git log --pretty=format 常用的选项

选项

说明

%H

提交对象(commit)的完整哈希字串

%h

提交对象的简短哈希字串

%T

树对象(tree)的完整哈希字串

%t

树对象的简短哈希字串

%P

父对象(parent)的完整哈希字串

%p

父对象的简短哈希字串

%an

作者(author)的名字

%ae

作者的电子邮件地址

%ad

作者修订日期(可以用 --date= 选项定制格式)

%ar

作者修订日期,按多久以前的方式显示

%cn

提交者(committer)的名字

%ce

提交者的电子邮件地址

%cd

提交日期

%cr

提交日期,按多久以前的方式显示

%s

提交说明

    你一定奇怪 作者 和 提交者 之间究竟有何差别, 其实作者指的是实际作出修改的人,提交者指的是最后将此工 作成果提交到仓库的人。 所以,当你为某个项目发布补丁,然后某个核心成员将你的补丁并入项目时,你就是 作者,而那个核心成员就是提交者。 我们会在 分布式 Git 再详细介绍两者之间的细微差别。

 

Table 2. git log 的常用选项

选项

说明

-p

按补丁格式显示每个更新之间的差异。

--stat

显示每次更新的文件修改统计信息。

--shortstat

只显示 --stat 中最后的行数修改添加移除统计。

--name-only

仅在提交信息后显示已修改的文件清单。
--name-status
显示新增、修改、删除的文件清单。
--abbrev-commit

仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。

--relative-date

使用较短的相对时间显示(比如,“2 weeks ago”)。

--graph

显示 ASCII 图形表示的分支合并历史。

--pretty

使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式)。

 

  9.限制输出长度 

 

    git log --since=2.weeks 显示最近两周内的提交
    git log --author 显示指定作者的提交
    git log --grep 搜索提交说明中的关键字
  如果只关心某些文件或目录的历史提交,可以在git log选项的最后面指定他们的路径。因为是放在最后位置的选项,所以用两根短划线(--)隔开之前的选项和后面限定的路径名。

Table 3. 限制 git log 输出的选项

选项

说明

-(n)

仅显示最近的 n 条提交

--since, --after

仅显示指定时间之后的提交。

--until, --before

仅显示指定时间之前的提交。

--author

仅显示指定作者相关的提交。

--committer

仅显示指定提交者相关的提交。

--grep

仅显示含指定关键字的提交

-S

仅显示添加或移除了某个关键字的提交

 

  10.撤销操作
    git commit --amend

  你提交后发现忘记了暂存某些需要的修改,可以向下面这样操作:
    $ git commit -m ‘initial commit‘
    $ git add forgotten_file
    $ git commit --amend
  最终你只会有一个提交:第二次提交将代替第一次提交的结果。


  接下来要演示如何操作暂存区域与工作目录中已修改的文件。
  这些命令在修改文件状态的同事,也会提示如何撤销操作。
  11.取消暂存的文件
    git reset

  12.撤销对文件的修改
  如果你不想保留对某个文件的修改,如何方便地撤销修改并将它还原成上次提交时的样子,

    git checkout -- 某文件

  这个是一个危险的命令,除非你确定不要这个文件了,否则不要使用这个命令。

  如果你仍然想保留对这个文件作出的修改,但是现在仍然需要撤销,我们将会在git分支介绍保存进度与分支;这些通常是更好的做法。

  记住:在git中任何已提交的东西几乎总是可以恢复的。甚至那些被删除的分支中的提交或使用 --amend选项覆盖的提交也可以恢复。然而,任何你未提交的东西丢失后很可能再也找不回来了。


三、远程仓库的使用
  1.查看远程仓库
    git remote
    git remote -v
  这个命令会显示需要读写远程仓库使用的git保存的简写与其对应的URL。

  2.添加远程仓库
    git remote add <shortname> <url>
    git remote add origin https://github.com/woailuo2015/git.git

  现在你可以在命令行中使用字符串origin来代替整个URL。
  3.拉取远程仓库:git fetch origin
    这个命令会访问远程仓库,从中拉取所有你还没有的数据。执行后,你将会有那个远程仓库中所有分支的额引用,可以随时合并会查看。

    git pull
  命令会自动抓取人后合并远程分支到当前分支。

  4.推送到远程仓库
    git push [remote-name] [branch-name]

    git push origin master
  只有当你有所克隆服务器的写入权限,并且之前没有人推送过时,这条命令才能生效。

  如果有人先你一步推送了,你只能先将他们的工作拉取下来并将其合并进你的工作后才能推送。

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

    git remote show origin

  6.远程仓库的移除与重命名
    git remote rename 来修改远程仓库的简写名

    git remote rename origin og

    git remote rm 来移除一个远程仓库
    git remote rm origin

四、打标签
  git可以给历史中的某一个提交打上标签,以示重要

  1.列出标签 git tag
    git tag -l ‘v1.8.5*‘ 列出v1.8.5系列的标签所有信息

  2.创建标签
    git使用两种主要类型的标签:轻量标签与附注标签
  轻量标签:很像一个不会改变的分支--它只是一个特定提交的引用。
  附注标签:是存储在git数据库中的一个完整对象。他们是可以被校验的。

  2.1附注标签
    git tag -a v1.4 -m ‘my version 1.4‘

  git show 命令可以看到标签信息与对应的提交信息
  git show v1.4
    

  2.2轻量标签:实质是将提交校验和存储到一个文件中:没有保存任何其他信息。

  不需要-a -s -m这些选项
    git tag v1.4-lw

  

  2.3 后期打标签 对过去的提交打标签

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

  $ git log --pretty=oneline
  15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch ‘experiment‘
  a6b4c97498bd301d84096da251c98a07c7723e65 beginning write support
  0d52aaab4479697da7686c15f77a3d64d9165190 one more thing
  6d52a271eda8725415634dd79daabbc4d9b6008e Merge branch ‘experiment‘
  0b7434d86859cc7b8c3d5e1dddfed66ff742fcbc added a commit function
  4682c3261057305bdd616e23b64b0857d832627b added a todo file
  166ae0c4d3f420721acbb115cc33848dfcc2121a started write support
  9fceb02d0ae598e95dc970b74767f19372d61af8 updated rakefile
  964f16d36dfccde844893cac5b347e7b3d44abbc commit the todo
  8a5cbc430f1a9c3d00faaeffd07798508422908a updated readme

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

    $ git tag -a v1.2 9fceb02

 

  2.4共享标签

  默认情况下,git push 命令并不会传送标签到远程仓库服务器上。 在创建完标签后你必须显式地推送标签到 共享服务器上。 这个过程就像共享远程分支一样 - 你可以运行 git push origin [tagname]。

  $ git push origin v1.5
  Counting objects: 14, done.
  Delta compression using up to 8 threads.
  Compressing objects: 100% (12/12), done.
  Writing objects: 100% (14/14), 2.05 KiB | 0 bytes/s, done.
  Total 14 (delta 3), reused 0 (delta 0)
  To git@github.com:schacon/simplegit.git
   * [new tag]         v1.5 -> v1.5

  如果想要一次性推送很多标签,也可以使用带有 --tags 选项的 git push 命令。 这将会把所有不在远程仓库 服务器上的标签全部传送到那里。 

  $ git push origin --tags
  Counting objects: 1, done.
  Writing objects: 100% (1/1), 160 bytes | 0 bytes/s, done.
  Total 1 (delta 0), reused 0 (delta 0)
  To git@github.com:schacon/simplegit.git
   * [new tag]         v1.4 -> v1.4
   * [new tag]         v1.4-lw -> v1.4-lw
现在,当其他人从仓库中克隆或拉取,他们也能得到你的那些标签。

  

  2.5检出标签

  在 Git 中你并不能真的检出一个标签,因为它们并不能像分支一样来回移动。 如果你想要工作目录与仓库中特定 的标签版本完全一样,可以使用 git checkout -b [branchname] [tagname] 在特定的标签上创建一个 新分支:

  $ git checkout -b version2 v2.0.0
  Switched to a new branch ‘version2‘

当然,如果在这之后又进行了一次提交,version2 分支会因为改动向前移动了,那么 version2 分支就会和 v2.0.0 标签稍微有些不同,这时就应该当心了。 

 

五、git别名

  Git 并不会在你输入部分命令时自动推断出你想要的命令。 如果不想每次都输入完整的 Git 命令,可以通过 git config 文件来轻松地为每一个命令设置一个别名。 这里有一些例子你可以试试:

  $ 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 commit`时,只需要输入 `git ci。 随着你继续不断地使用 Git,可能也会经常使 用其他命令,所以创建别名时不要犹豫。

在创建你认为应该存在的命令时这个技术会很有用。 例如,为了解决取消暂存文件的易用性问题,可以向 Git 中 添加你自己的取消暂存别名: 

$ git config --global alias.unstage ‘reset HEAD --‘
这会使下面的两个命令等价:
  $ git unstage fileA
  $ git reset HEAD -- fileA

这样看起来更清楚一些。 通常也会添加一个 last 命令,像这样: $ git config --global alias.last ‘log -1 HEAD‘

这样,可以轻松地看到最后一次提交:
  $ git last
  commit 66938dae3329c7aebe598c2246a8e6af90d04646
  Author: Josh Goebel <dreamer3@example.com>
  Date:   Tue Aug 26 19:48:51 2008 +0800
      test for current head
      Signed-off-by: Scott Chacon <schacon@example.com>

可以看出,Git 只是简单地将别名替换为对应的命令。 然而,你可能想要执行外部命令,而不是一个 Git 子命 令。 如果是那样的话,可以在命令前面加入 ! 符号。 如果你自己要写一些与 Git 仓库协作的工具的话,那会很 有用。 我们现在演示将 git visual 定义为 gitk 的别名:

  $ git config --global alias.visual ‘!gitk‘

总结

现在,你可以完成所有基本的 Git 本地操作-创建或者克隆一个仓库、做更改、暂存并提交这些更改、浏览你的 仓库从创建到现在的所有更改的历史。 

 

git基础

标签:alias   scott   git使用   存在   show   1.2   删除   查看   现在   

原文地址:https://www.cnblogs.com/kaid/p/8979265.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!