1 获取Git仓库

  1. 在现有目录中初始化仓库
git init
  1. 克隆现有的仓库
git clone https://github.com/yangwang12345/node_test.git
git clone -b 分知名 路径 //切换到其他远程分支

Git 支持多种数据传输协议

https:// 协议

git:// 协议

SSH 传输协议 : user@server:path/to/repo.git

2 记录每次更新到仓库



每一个文件都不外乎这两种状态:已跟踪(tracked)或未跟踪(untracked)

初始化一个仓库之后,文件处于未修改(Unmodified),编辑文件之后处于修改(Modifyed),将修改的文件放入暂存区(Staged),然后提交所有暂存区的修改,形成了Git的生命周期

2.1 检查当前文件状态
git  status

如果有修改的文件,此时不被跟踪,将提示我们用git add使它被跟踪,git add可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等;运行了 git add 之后又作了修订的文件,需要重新运行 git add 把最新版本重新暂存起来:

git add xxx文件名

用git status会看到文件已被跟踪,并处于暂存状态

2.2 状态简览
$ git status -s
M README
MM Rakefile
A lib/git.rb
M lib/simplegit.rb
?? LICENSE.txt

?? 新添加的未跟踪文件

A 新添加到暂存区中的文件

MM Rakefile 在工作区被修改并提交到暂存区后又在工作区中被修改了,所以在暂存区和工作区都有该文件被修改了的记录。

M 该文件被修改了但是还没放入暂存区

M 该文件被修改了并放入了暂存区

2.3 忽略文件

新建一个.gitignore文件

touch .gitignore
*.[oa] //忽略所有以 .o 或 .a 结尾的文件
*~ //忽略所有以波浪符(~)结尾的文件

文件 .gitignore 的格式规范如下:

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

    glob模式: glob 模式是指 shell 所使用的简化了的正则表达式。 星号()匹配零个或多个任意字符;[abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。 使用两个星号() 表示匹配任意中间目录,比如a/**/z 可以匹配 a/z, a/b/z 或 a/b/c/z等。
# no .a files
*.a # but do track lib.a, even though you're ignoring .a files above
!lib.a # only ignore the TODO file in the current directory, not subdir/TODO
/TODO # ignore all files in the build/ directory
build/ # ignore doc/notes.txt, but not doc/server/arch.txt
doc/*.txt # ignore all .pdf files in the doc/ directory
doc/**/*.pdf

2.4查看已暂存和未暂存的修改

git diff

查看已暂存的将要添加到下次提交里的内容,可以用 git diff --cached 命令

2.5提交更新

git commit
git commit -m "信息会一行显示"

git commit 会进入vim编辑器,i编辑,esc退出编辑模式 :wq保存并退出

2.6 跳过使用暂存区域

$ git commit -a -m 'added xxx'

给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交

2.7移除文件

移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交.

可以用 git rm 命令完成此项工作,并连带从工作目录中删除指定的文件,这样以后就不会出现在未跟踪文件清单中了。

如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 git rm -f xxx,这样的数据不能被 Git 恢复。

git rm xxx

我们想把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中,当你忘记添加 .gitignore 文件,不小心把一个很大的日志文件或一堆 .a 这样的编译生成文件添加到暂存区时,git rm --cached或者glob模式

$ git rm --cached README
$ git rm log/\*.log
$ git rm \*~

2.8 移动文件

重命名file_from 为file_to

$ git mv file_from file_to
$ mv README.md README  //等价于
$ git rm README.md
$ git add README

3 查看提交历史

git log
git log -p -2

-p,用来显示每次提交的内容差异。 你也可以加上 -2 来仅显示最近两次提交

4 撤销操作

$ git commit --amend

如果自上次提交以来你还未做任何修改,那么快照会保持不变,而你所修改的只是提交信息

你提交后发现忘记了暂存某些需要的修改

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

取消暂存 CONTRIBUTING.md 文件

$ git reset HEAD CONTRIBUTING.md

撤销到某个历史版本commit

git log
git reset --hard xxx(commit历史快照)

撤销修改,还原成上次提交时的样子

 git checkout -- CONTRIBUTING.md

撤销所有add的文件

git reset HEAD .

5 远程仓库的使用

5.1 远程仓库的使用
$ git remote
origin //远程服务器的简写
$ git remote -v //会显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL
origin https://github.com/yangwang12345/node_test.git (fetch)
origin https://github.com/yangwang12345/node_test.git (push)
5.2 添加远程仓库
$ git remote
origin
$ git remote add pb https://github.com/paulboone/ticgit
$ git remote -v
origin https://github.com/schacon/ticgit (fetch)
origin https://github.com/schacon/ticgit (push)
pb https://github.com/paulboone/ticgit (fetch)
pb https://github.com/paulboone/ticgit (push)

果你想拉取 Paul 的仓库中有但你没有的信息,可以运行 git fetch pb,现在 Paul 的 master 分支可以在本地通过 pb/master 访问到

$ git fetch pb
5.3 从远程仓库中抓取与拉取
$ git fetch [remote-name]

必须注意 git fetch 命令会将数据拉取到你的本地仓库,你将会拥有那个远程仓库中所有分支的引用,可以随时合并或查看 - 它并不会自动合并或修改你当前的工作。 当准备好时你必须手动将其合并入你的工作。

5.3 推送到远程分支

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

$ git push origin master //将 master 分支推送到 origin 服务器时

注意:当你和其他人在同一时间克隆,他们先推送到上游然后你再推送到上游,你的推送就会毫无疑问地被拒绝。 你必须先将他们的工作拉取下来并将其合并进你的工作后才能推送。

5.4 查看远程仓库
$ git remote show origin
5.5 远程仓库的移除与重命名
$ git remote rename pb paul
$ git remote
origin
paul $ git remote rm paul
$ git remote
origin

6 打tag

6.1 查看标签

比较有代表性的是人们会使用这个功能来标记发布结点(v1.0 等等)

$ git tag
v0.1
v1.3 $ git tag -l 'v2017*' //只对2017开头的tag有兴趣
v20170105
v20170209
v20170216
v20170217
v20170302
v20170303
v20170713
v20170720
v20170721
v20170822
v20171026
6.2 创建标签

附注标签

$ git tag -a v1.4 -m 'my version 1.4'
$ git tag
v0.1
v1.3
v1.4 $ git show v1.4 //查看标签信息

上一章 了解git 下一章 git分支

git使用教程之git基础的更多相关文章

  1. git使用教程之git分支

    1 分支简介 让我们来看一个简单的分支新建与分支合并的例子,实际工作中你可能会用到类似的工作流. 你将经历如下步骤: 开发某个网站. 为实现某个新的需求,创建一个分支. 在这个分支上开展工作. 正在此 ...

  2. git 入门教程之 git 私服搭建教程

    git 私服搭建教程 前几节我们的远程仓库使用的是 github 网站,托管项目大多是公开的,如果不想让任何人都能看到就需要收费,而且 github 网站毕竟在国外,访问速度太慢,基于上述两点原因,我 ...

  3. git 入门教程之 git bash 竟然不支持 tree 命令

    开门见山 git bash 是 Windows 用户安装 git 时默认安装的命令行工具,不仅界面漂亮功能也不错,大多数情况下可以替代 Windows 原生的 cmd 命令行. 然而,git bash ...

  4. Nmap扫描教程之Nmap基础知识

    Nmap扫描教程之Nmap基础知识 Nmap扫描Nmap基础知识 Nmap是一个免费开放的网络扫描和嗅探工具包,也叫网络映射器(Network Mapper).Nmap工具可以用来扫描电脑上开放的端口 ...

  5. [批处理教程之Git]001.Git 常用命令大全

    基本技巧 1.安装后的第一步 安装git后,第一件事你需要设置你的名字和邮箱,因为每次提交都需要这些信息. $ git config --global user.name "Some One ...

  6. git 入门教程之github 教程

    github 教程 github 是一个基于 git 的代码托管平台,是平时工作学习的好帮手,学会如何用好 github 网站能够帮助我们更好分享代码或者与其他开发人员合作. 注册 github 账号 ...

  7. CSDN code使用教程之git使用方法具体解释

          首先须要下载GITclient.http://git-scm.com/downloads. . . 然后再code.csdn.net上面创建一个项目,假设 你的项目已经存在.那么请建立项目 ...

  8. Android/AndroidStudio/idea使用教程之git使用(详细)(码云)

    已经安装好了AndroidStudio,安装教程 本教程是作者自己摸索出来的,有不足之处还请大家海涵.多多拍砖,互相学习. 第一步:下载git,安装git客户端 直接百度git,下载git ​ 安装g ...

  9. git 入门教程之1分钟快速了解 git

    git 入门教程 git 是分布式版本控制系统,是文本文档管理的利器,是帮助你管理文件动态的好帮手. 如果你曾经手动管理过文档,一定有这样的经历,比如你正在编辑文档,想删除某段落,又担心不久后可能会恢 ...

随机推荐

  1. Linux 安装PHP探针

    学习linux系统还是很有意思的事情,下面这个就是探针,想必有人已经看到过类似的界面主要用来查看自己服务器的运行状况,简单看看内存占用及运行时间就可以了 1 首先要安装Apahce 及 php,命令如 ...

  2. 【重点突破】——Cookie的使用

    cookie:小甜饼 cookie:保存客户端浏览器中一个纯文本文件 版本高的浏览器可查看   F12->Resource  左下方cookie    查看 cookie作用: 保存:[安全性要 ...

  3. D. Mysterious Present (看到的一个神奇的DP,也可以说是dfs)

    D. Mysterious Present time limit per test 2 seconds memory limit per test 64 megabytes input standar ...

  4. php中常用的字符串长度函数strlen()与mb_strlen()实例解释

    int strlen ( string $string )  int strlen ( string $string )  获取给定字符串的[字节]长度 成功则返回字符串$string的长度,如果$s ...

  5. Struts 关联DTD 文件

    Struts 的xml 文件在Eclipse 中  默认是不会有提示的. 但是我们可以关联DTD 文件, 这样子就可以出现如下的struts   提示了 1. 首先得先确保自己有Struts2 的Sr ...

  6. C# 7 局部函数剖析

    局部函数是C# 7中的一个新功能,允许在一个函数中定义另一个函数. 何时使用局部函数? 局部函数的主要功能与匿名方法非常相似:在某些情况下,创建一个命名函数在读者的认知负担方面代价太大.有时,函数本身 ...

  7. STM8学习

    今天正式学习STM8,用的是风驰STM8S208R开发板. 在编译例程遇到了如下这样的问题. " #error clnk debug\stm8s_demo.lkf:47 can't open ...

  8. Python内置类型(2)——布尔运算

    python中bool运算符按优先级顺序分别有or.and.not, 其中or.and为短路运算符 not先对表达式进行真值测试后再取反 not运算符值只有1个表达式,not先对表达式进行真值测试后再 ...

  9. Java面向对象 IO (四)

     Java面向对象  IO  (四) 知识概要:                 (1)打印流 (2)序列流 SequenceInputStream (3)ObjectInputStream与Ob ...

  10. 学习总结---OSPF协议

    总结: 1.ospf协议报文不会泛洪扩散,而是逐级路由器处理后,再从所有ospf启用端口发送出去,也就是说,只能从邻居接收到ospf报文,报文的源ip是邻居的ip地址,目的ip是组播ip. 2.开启o ...