有两种方法获得一个 git 仓库:自行初始化,克隆别人已有的仓库

自行初始化

git init

克隆别人已有的库

git clone git@github.com:garrisonz/gitStudy.git

和其他版本管理系统不同, Git 的命令是 clone, 而不是 checkout。Git clone 除了拷贝最新版本的文件,还会拷贝服务器上存储的变更历史记录。

在仓库中记录变更历史

工作目录下的文件,可以分为两类:已被跟踪的 (tracked) 、尚未被跟踪的 (untracked)。

已被跟踪的文件又可以分三种状态: Unmodified, Modified, Staged。Unmodified 其实也就是 commited。

检查项目的状况使用下面的命令。这是一个很有用的命令,在不同状态下提示不同的信息,指引你如何做下一步。

git status

使用 add 命令可以把文件从未被跟踪,改为已被跟踪状态。

$ echo 'tony' > .txt
$ git add .txt

add 是一个多功能命令,有下面几种

  • 开始追踪文件
  • 把文件放到 stage area
  • 把合并冲突的文件标识为已解决状态

可以把 add 理解为 "把这些内容加入到下一次 commit "。把一个修改过的文件放到 tage area 后,再做一次修改,这时该文件会有两个版本:modified 和 staged。如果此时做 commit ,只会提交 staged 版本的文件。

忽略文件

.gitignore 用于配置需要忽略的文件。配置规则如下

  • 忽略空行或者 # 开头的行
  • 接收标准 glob 模式匹配
  • 前斜杠 / 开始,避免全部目录遍历
  • 前斜杠 / 结尾,表明是一个目录
  • 感叹号 ! 开始,表示取反

介绍下 glob 模式匹配。这像是一个简化的正则匹配。

  • * 匹配零个或多个字符
  • ? 匹配一个字符
  • [abc] 匹配中括号中的任何一个字符(此处为 a 或 b 或 c )
  • [0-9] 匹配范围内的值(此处为 0 至 9 任何一个字符)

差异

git diff 显示已被修改但没放到 stage area 的变动,git diff --staged 显示已放到 staged area 但没有 commit 的变动。强调一下, git diff 并不显示所有没有被 commit 的变动,而是只显示还没有被放到 stage area 的变动。

$ git diff
$ git diff --staged

提交变动到库

把 stage area 里面的变更提交库中,使用下面命令

$ git commit -m 'fix iss54'

下面命令跳过 stage area (git add) 步骤,直接把所有已追踪的文件的全部变更提交到仓库中。

$ git commit -m 'fix iss54' .
$ git commit -a -m 'fix iss54' 

删除文件,并从 staging ara 中删除历史记录和追踪,使用下面命令:

$ git rm <fileName>

希望 git 不用再追踪该文件,但在目录中保留该文件,则使用下面的命令

$ git rm --cached <fileName>

查看历史记录

git log 用于查看历史记录,选项 -[n] 表示查看最近的前 n 条记录。--stat 会显示历史声明,显示具体修改了的文件名。推荐使用 Eclipse 上的 egit 插件查看历史记录。

$ git log -3 --stat

撤销操作

在不同状态需要撤销不同的操作时,可以参考 git status 的提示来进行。例如,需要撤销 modified 的文件或者 staged 的文件,根据 git status 的提示进行即可。撤销操作有危险,撤销的变更无法再复现,谨慎使用。

远程库

git remote 会显示远程服务器名,-v 选项显示远程服务器名和 URL 的读、写匹配。

$ git remote
$ git remote -v

添加一个远程服务器的命令

$ git remote add myfork git@github.com:garrisonz/bootstrap.git

获取远程服务器的数据的命令。fetch 命令只会从远程服务器中下载数据,但是不会把变更合并到当前的工作目录,需要手动进行合并 (merge)。 pull 命令相当于 fetch + merge。当项目有多个分支时,推荐自行 fetch 然后 merge.

$ git fetch myfork

推送代码到远程服务器

git push [remote-server] [remote-branch]

删除远程服务。例如在 git 仓库中删除一个名为 myfork 的远程服务器

git remote rm myfork

打标签 (Tag)

git 和大多数版本管理系统一样,可以给指定的历史顺序打上标签。一般给发布的版本打上标签,如 v1.0。打标签有两种类类型: 轻量型和声明型。

轻量型标签,是一个指向特定的 commit 记录的指针。

$ git tag v0.

声明性标签,除了有指向特定的 commit 记录指针外,还会存储更多额外信息。推荐使用。

$ git tag -a v1. -m 'the stable v1.0 version'

需要签出指定的标签版本

$ git checkout -b version1 v1.

命令别名

定义别名是为了减少敲打键盘的动作,为了方便记忆,保持打字节奏,我把别名都设置为三个字符。

$ git config --global alias.cot checkout
$ git config --global alias.brh branch
$ git config --global alias.cmt commit
$ git config --global alias.sts status

参考资料

Chapter 2, Git Basics, git-scm

[git] git 的基础功能的更多相关文章

  1. Git Pro - (1) 基础

    近乎所有操作都可本地执行 在Git中的绝大多数操作都只需要访问本地文件和资源,不用连网. 三种状态 对于任何一个文件,在 Git 内都只有三 种状态:已提交(committed),已修改(modifi ...

  2. Git的常见基础操作命令

    Git的常见基础操作命令 1安装初始化 1.1安装git本地安装Windows版本 下载地址: https://git-scm.com/downloads/ 1.2初始化Git用户信息配置 配置git ...

  3. 3分钟学会git命令的基础使用

    前言废话 下面我们就来看看gitlab服务器搭建好(http://www.cnblogs.com/JeremyWYL/p/8258368.html) 之后,git命令的基础使用,基本上就能满足我们平时 ...

  4. Git的杀手级功能之 一 远程仓库

    Git的杀手级功能之一:远程仓库 Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上. 一.注册GitHub账号,然后和本地Git仓库来关联免费获得Git远程仓库来学校git的远程仓 ...

  5. Git操作(基础篇)

    Git操作(基础篇) Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目.Git的读音为/gɪt/.Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常 ...

  6. git 使用教程 --基础二

    一:分支学习: branch称为分支,默认仅有一个名为master的分支.一般开发新功能流程为:开发新功能时会在分支dev上进行,开发完毕后再合并到master分支. 分支的作用: 创建分支:(创建分 ...

  7. Git学习笔记----基础运用

    安装Git Windows: 进入官网下载或百度网盘下载 Git(V2.23_x64) 提取码:uf2x Ubuntu: sudo apt-get -install git 安装完成之后打开git命令 ...

  8. Git工具使用基础

    Git 是一个分布式的版本控制工具,本篇文章从介绍Git开始,重点在于介绍Git的基本命令和使用技巧,让你尝试使用Git的同时,体验到原来一个版 本控制工具可以对开发产生如此之多的影响,文章分为两部分 ...

  9. git学习记录——基础概念和文件的基本操作

    夸一下git git是当前世界上最先进的分布式版本控制系统 优势: 1.不必联网 2.Git极其强大的分支管理,把SVN等远远抛在了后面. 集中式的代表CVS和SVN 分布式的代表BitKeeper, ...

  10. Git 升级与基础适用

    Git 升级 老方法 yum install git 目前centos6安装的 git 版本为1.7相对于 github 以及自己安装的 git 服务器都相对比较老,所以一般不适用此方法安装) 编译安 ...

随机推荐

  1. What's DB2 模式?

    近期负责一个银行方面的项目,需要用到DB2实现多数据库版本切换.初步接触DB2,对于它的管理工具(IBM DATA STUDIO)虽然与ORACLE\MSSQL大同小异,但还是有些东西不一样的.比如什 ...

  2. java-成员变量的属性与成员函数的覆盖

    java中在多态的实现是通过类的继承或者接口的实现来完成的. 在类继承或者接口实现过程中就会涉及到成员属性以及成员函数的重写,需要注意的是,成员函数的重写是直接覆盖父类的(继承中),但是成员变量重写是 ...

  3. ACM hdu 1008 Elavator

    Elevator其实是一道水题,思路也很简单,但不知道怎么也不能AC,后来看了别人的再比较自己的以后找到错误. 在判断奇偶数之后的语句时,我用了if()  else if(),这是不能AC的原因,这种 ...

  4. 速卖通---发布商品aeopAeProductPropertys这个字段值报07004013的错误

    由于文档的说明很少,导致里面改填写那些值都是靠自己推敲出来,当然可以根据他们的错误提示了研究,他们的错误提示也给出了相关的帮助了, 例如通过categoryid的200000001获取到"i ...

  5. Mac OS X 好用的软件包管理工具 Homebrew

    github地址:https://github.com/Homebrew/homebrew 安装方法:http://brew.sh/

  6. php读取excel,以及php打包文件夹为zip文件

    1.把文件下载到本地,放在在Apache环境下2.d.xlsx是某游戏的服务器名和玩家列表,本程序只适合此种xlsx文件结构,其他结构请修改index.php源码3.访问zip.php的功能是把生成的 ...

  7. AS3的数据类型和定义

    AS3的数据类型分: 基元数据类型:Boolean  int(整数)  Number(长的浮点数)  unit(很大的正整数)  String 复杂数据类型:Arrary  Date  Error   ...

  8. .Net Remoting浅释

    面试的时候,被问到.Net Remoting 工作方式及它和Web Service的区别,在此做个整理,顺便回顾一下. .Net Remoteing: 我们可以认为.Net Remoting是一种分布 ...

  9. DexIndexOverflowException: Cannot merge new index 66080 into a non-jumbo instruction!

    问题 该问题是方法数超过了65536(DEX 64K problem),无法编译成单个dex文件. 解决方案 谷歌官方给出的解决方案 android { compileSdkVersion 21 bu ...

  10. bootstrap的栅格布局不支持IE8该如何解决

    用bootstrap的栅格布局在IE8上出现失效的情况,通常有两种解决方式 方法/步骤   方法一:引用第三方js,一个叫respond.js的东西,github上可以搜到   方法二:由于IE8不支 ...