仓库 init,clone,remote

  1. 创建仓库 : init
    2. 初始化一个目录作为本地仓库 : 请在现有的目录下运行 git init
    2. 初始化一个本地仓库指定目录 : 请在当前的目录下运行 git init 目录
    说明:
    执行 git init 的结果会在指定的目录下产生一个 .git 子目录。
    该子目录会在你以后对本项目的管理和控制期间起到了至关重要的作用。
    该子目录保存了一系列重要的数据及信息以便于你可方便的控制本项目。
    以后你在本项目下的所有和操作相关的数据信息都会保存在该子目录中。
    此操作实际上是在本地开辟一个仓库并以目录的形式存放于本地磁盘中。

  2. 克隆仓库 : clone
    1. 进入路径再拷贝仓库 : 在现有的目录下运行 git clone 仓库地址
    2. 在拷贝时重命名仓库 : _在当前的目录下运行 git clone 仓库地址 新名字 **3. 拷贝时选择一个路径 :** _在当前的目录下运行git clone path/新名字_ _说明:_ _该操作将远端/github的一个仓库克隆到本地并以项目名创建一个同名目录。_ _如果没有指定仓库名和要保存路径则会在当前的目录下创建一个同名的仓库。_ _克隆仓库之前它调用 init 对该目录进行初始化,使之包含有 .git 子目录。_ _在初始化完本地仓库后则把当前项目状态信息拷贝下来保存到 .git 目录中。_ _在这之后会把其他与项目相关的所有文件拷贝到当前已经初始化过的目录中。_ _只要没有任何其他意外的话其克隆下来的仓库内容会和远端保持一致的结构。_ _git clone支持很多种协议:_ _HTTPS协议:https://github.com/username/repo.git`_
    HTTP协议: http://github.com/username/repo.git
    GIT 协议: git://github.com/username/repo.git
    FTP 协议: ftp://github.com/username/repo.git
    SSH 协议: ssh://github.com/username/repo.git
    SSH 协议: `git@github.com:username/repo.git`
    关于更多协议详细请参考阮一峰博客

  3. 关联仓库 : remote
    1. 显式本地仓库所关联的远端仓库名请在仓库目录下运行 git remote
    2. 显式本地仓库所关联的远端仓库名及地址请在仓库目录下运行 git remote -v
    3. 为本地仓库创建一个关联到远端仓库请在仓库目录下运行 git add 远端库名 仓库地址
    4. 删除本地仓库与远端仓库已经被创建的关联请在仓库目录下运行 git rm 远端库名
    说明:
    1. 要关联一个仓库,则你必须要有一个本地仓库参考 1 和 2
    2. 要关联一个仓库,远端/github页面上则必须创建一个已存在的仓库
    3. git 仓库默认使用 origin 作为远端的仓库名,在 clone 的仓库会有此体现
    4. 在创建关联时,远端仓库名可被自定义,其结果就是该名字与仓库地址相关联
    5. 在远端/github网页上创建仓库时会给你一个地址,该地址则作为要关联的仓库地址
    6. 创建关联的意思就是把本地,与 远端/github页面上的一个仓库进行同步
    即关联后,你在仓库的所有操作,都可以通过 git push 更新到远端/github仓库


注意:
1. 一个已经被初始化的远程仓库,默认使用的远程名为 origin
2. 远端仓库名只是一个标识,可以理解为它是用于标识一个仓库
3. 远端仓库名与你在远端/github页面上创建的仓库名没有任何关系
4. 远端仓库名仅仅代表该名字是后面地址所指向的仓库,详见 git remote -v

跟踪文件/缓存文件 add

  1. 跟踪一个文件的内容 : 在仓库目录下运行 git add 文件名
  2. 跟踪多个文件的内容 : 在仓库目录下运行 git add 文件1 文件2 ...
  3. 跟踪所有文件的内容 : 在仓库目录下运行 git add ../*
  4. 跟踪指定类型的文件 : 在仓库目录下运行 git add *.后缀名
  5. 取消对文件内容跟踪 : 在仓库目录下运行 git reset HEAD 文件名
    说明 :
    1. 跟踪文件也被称为缓存,实际上就是把该文件的当前状态进行保存
    2. 该命令以 commit 作为一个开始,即 commit 之后与使用情况1相同
    2. 在参考官方的资料中指明 add 命令只缓存文件的内容而不是文件
    更多关于 add 的详细内容请参考gitbook-追踪新文件
    使用情况 :
    1. 原有的文件没被修改,add 任何文件没有显示
    2. 原有的文件已被修改,add 这个文件则会生效
    3. 如果创建了一个文件,add 这个文件则会生效
    4. 如果删除了一个文件,如果该文件之前不在缓存中,add 这个文件会失败,但不可恢复
    5. 如果删除了一个文件,如果该文件之前已在缓存中,add 这个文件没提示,但可以恢复
    6. 如果文件已在缓存中,修改该文件后没有add,在缓存中的文件依然是在修改之前的状态
    7. 如果你把所有更改的文件都 add 到缓存中后再做一次提交,则 add 任何文件都没有提示

查看项目当前状态/查看缓存情况 status

  1. 详细查看项目的当前状态 : 在仓库目录下运行 git status
  2. 精简查看项目的当前状态 : 在仓库目录下运行 git status -s
    说明 :
    1. 该命令以一次 commit 为一个开始,即 commdit 之后与情况1相同
    使用情况 :
    1. 原有的文件没被修改,status 没有任何文件状态
    2. 原有的文件已被修改,status 会列出该文件状态
    3. 如果曾删了一个文件,status 会列出该文件状态
    4. 当把一个文件 add 到缓存,status 则会显式该文件已经被缓存的状态
    5. 当把缓存中的文件又修改, status 则会显式该文件的两个版本的状态
    6. 当把所有改动的文件都 add 到缓存中时,status 则显示已缓存的文件
    7. 如果你现在对所有缓存的文件做 commit,status 则会与情况 1 相同
    8. 如果你现在再修改任意一个文件,status 则会列出该文件的当前状态
    9. 如果把该文件恢复到原来的样子,status 则显示与情况 1 相同的状态

关于 git status -s 的一部分文件状态标识 :
?? : 表示已修改增加删除而未被跟踪的文件
A : 表示正在被跟踪的文件,即已在缓存中的文件
AM : M 在右边表示正在跟踪的文件被修改,但未把更改添加到缓存中
M : M 在左边标识正在跟踪的文件被修改,但已把更改添加到缓存中
关于其他更多的标识请参考gitbook-状态简览

查看已经提交的或尚未提交的文件更改情况 diff

  1. 查看上次提交之后尚未缓存的所有更改 : 在项目目录下运行 git diff
  2. 查看上次提交之后已经缓存的所有更改 : 在项目目录下运行 git diff --cached
  3. 查看已经被缓存和未被缓存的所有更改 : 在项目目录下运行 git diff HEAD
    说明 :
    1. 该命令以一次 commit 为一个开始,即 commit 之后与情况1相同
    2. 该命令只对原有的文件起作用,新增加没有 add 过的文件不影响
    3. 该该命令显示的是上一次 commit 后到与当前原有文件被更改情况
    使用情况 :
    diff : 只显示原有的,然后被修改、删除的文件且尚未缓存的
    1. 原有的文件没被修改,无论有没 add,diff 则没有任何详细显示
    2. 原有的文件已被修改,没有执行 add,diff 会详细显示删减什么
    3. 原有的文件已被修改,但执行了 add,diff 则没有任何详细显示
    4. 如果删除原有的文件,没有执行 add,diff 会详细显示删减什么
    5. 对于刚创建的新文件,无论增删改查,diff 不受任何影响
    diff –cached 或 staged : 只显示commit 之后任何被 add 过的文件
    1. 原有的文件没被修改,无论有没 add,diff –cached/–staged 则没有任何详细显示
    2. 原有的文件已被修改,没有执行 add,diff –cached/–staged 则没有任何详细显示
    3. 原有的文件已被修改,但执行了 add,diff –cached/–staged 会详细显示删减什么
    4. 如果删除原有的文件,diff –cached/–staged 显示的是在没被删之前的 add 的版本
    4. 对于刚创建的新文件,无论增删改查,diff –cached/–staged 不受任何影响
    diff HEAD : 则根据以上的情况,同时输出 被 add 和 没 add 的文件

提交更新 commit

  1. 提交缓存内容并且自编辑提交信息 status : 在项目目录下运行 git commit
  2. 提交缓存内容并且自编辑提交信息 diff : 在项目目录下运行 git commit -v
  3. 提交缓存内容的同时编辑提交信息 : 在项目目录下运行 git commit -m "提交信息"
  4. 先add到缓存后再提交缓存的内容 : 在项目目录下运行 git commit -a
  5. 撤销对此次从缓存中所提交的内容 : 在项目目录下运行 git commit --amend

查看、创建、删除、切换、合并 分支 branch,checkout

  1. 查看所有分支以及所在的分支 : 在项目目录下运行 git branch
  2. 在主分支下建立一个新的分支 : 在项目目录下运行 git branch 分支名
  3. 删除一个已有的分支及其数据 : 在项目目录下运行 git branch -d 分支名
  4. 在所有的分支之间来回的切换 : 在项目目录下运行 git checkout 分支名
  5. 创建新的分支并切换到该分支 : 在项目目录下运行 git checkout -b 分支名
  6. 合并另外一个分支到当前分支 : 在项目目录下运行 git merge 分支名

移除文件 rm

  1. 移除缓存区与本地的文件 : 在项目目录下运行 git rm 文件名
  2. 只移除缓存区里面的文件 : 在项目目录下运行 git rm --cached 文件名
  3. 更方便的性移除多个文件 : 在项目目录下运行 git rm *.后缀名

移动文件/更改文件名 mv

  1. 更新一个文件名 : 在项目目录下运行 git mv 源文件 新名字

查看提交历史 log

  1. 查看所有的提交历史记录 : 在项目目录下运行 git log
  2. 精简查看所有的提交历史 : 在项目目录下运行 git log --stat
  3. 查看提交历史内容的差异 : 在项目目录下运行 git log -p
  4. 查看最近3 次的提交记录 : 在项目目录下运行 git log -3
  5. 查看提交历史格式化输出 : 在项目目录下运行 git log --pretty=选项
    关于 –pretty=选项
  6. --pretty=oneline 每次提交显示为一行
  7. --pretty=format:"占位符" 定制显示记录的格式
  8. 一个带占位符的例子 :git pretty=format:"%h - %an, %ar : %s"
    关于 format 选项的占位符
    %H : 提交对象(commit)的完整哈希字串
    %h : 提交对象的简短哈希字串
    %T : 树对象(tree)的完整哈希字串
    %t : 树对象的简短哈希字串
    %P : 父对象(parent)的完整哈希字串
    %p : 父对象的简短哈希字串
    %an : 作者(author)的名字
    %ae : 作者的电子邮件地址
    %ad : 作者修订日期(可以用 –date= 选项定制格式)
    %ar : 作者修订日期,按多久以前的方式显示
    %cn : 提交者(committer)的名字
    %ce : 提交者的电子邮件地址
    %cd : 提交日期
    %cr : 提交日期,按多久以前的方式显示
    %s : 提交说明