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. JAVA多线程---高并发程序设计

    先行发生原则 程序顺序原则:一个线程内保证语义的串行性 volatile:volatile变量的写,先发生于读,这保证了volatile变量的可见性 锁规则:解锁必然发生在随后的加锁前 传递性:A优先 ...

  2. 02.python基础知识_02

    数据类型 1.整型 2.布尔值 3.字符串 4.列表 5.字典 6.集合 1.int(整型) i = 2 print(type(i)) 输出:<class 'int'> 2.bool(布尔 ...

  3. Linux入门之常用命令(9)进程及端口查看

    [Linux下查看进程] 查看程序对应进程号:ps –ef|grep 程序名 查看进程占用端口:ss -pl | grep 进程号 [通过进程查看端口] 查看占用的端口号:netstat –nltp| ...

  4. Select的option事件问题

    一开始看你们会觉得没问题,我也就是觉得没问题所以才找不到错误所在. 问题出在option本身是没有事件的说法的,只能在select里添加事件,再获取option的属性值 这是我的写法 select设置 ...

  5. PHP CodeBase: 生成N个不重复的随机数

    有25幅作品拿去投票,一次投票需要选16幅,单个作品一次投票只能选择一次.前面有个程序员捅了漏子,忘了把投票入库,有200个用户产生的投票序列为空.那么你会如何填补这个漏子? <?php /* ...

  6. SQL Server 锁机制 悲观锁 乐观锁 实测解析

    先引入一些概念,直接Copy其他Blogs中的,我就不单独写了. 一.为什么会有锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: 1.丢失更新 A,B两个用户读同一数据并进行修改,其中 ...

  7. Python自学笔记-time模块(转)

    在Python中,通常有这几种方式来表示时间:1)时间戳 2)格式化的时间字符串 3)元组(struct_time)共九个元素.由于Python的time模块实现主要调用C库,所以各个平台可能有所不同 ...

  8. gulp使用2-gulp-less及watch和错误提示

    gulpfile.js /** * Created by Administrator on 2017/4/4 0004. */ const gulp = require('gulp'), less = ...

  9. 自动化selenium开发

    一.开发环境搭建 1.Firefox浏览器 1.1 下载firefix并安装. 1.2 Firefox中打开"开始菜单“ -> ”开发者“ -> ”获取更多工具“ -> 搜 ...

  10. memcached讲解

    Memcached 最近空闲的是时候研究了一下缓存,根据公司环境对缓存进行了系统的了解,我们使用memcacheed进行缓存,下面结合我的 理解,以及网上的相关资料,memecached进行讲解. m ...