git语法及github的使用

git简介

Git 不同以Svn对待或保存数据(git是直接记录快照,而非差异比较)。反之,Git 更像是把数据看作是对小型文件系统的一组快照。每次你提交更新,或在 Git 中保存项目状态时,它主要对当时的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件,Git 对待数据更像是一个 快照流
git语法及github的使用

Git 保证完整性

Git 中所有数据在存储前都计算校验和,然后以校验和来引用。这意味着不可能在 Git 不知情时更改任何文件内容或目录内容,Git 用以计算校验和的机制叫做 SHA-1 散列(hash,哈希)。这是一个由 40 个十六进制字符(0-9 和 a-f)组成字符串,基于 Git 中文件的内容或目录结构计算出来。SHA-1 哈希看起来是这样:git语法及github的使用
检查配置信息
git config --list 命令来列出所有 Git 当时能找到的配置

git基础

获取git仓库

1.在现有目录中初始化仓库
git init
2.克隆现有的仓库–克隆一个项目和它的整个代码历史(版本信息)
git clone [url] (自定义本地仓库名)

git的常用操作git语法及github的使用
git的文件操作

版本控制就是对文件的版本控制,工作目录下的每一个文件都不外乎这两种状态:已跟踪或未跟踪。GIT不关心文件两个版本之间的具体差别,而是关心文件的整体是否有改变,若文件被改变,在添加提交时就生成文件新版本的快照,而判断文件整体是否改变的方法就是用SHA-1算法计算文件的校验和
git语法及github的使用
Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged

Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件

Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改

Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified

检查当前文件状态
git status 命令可以查看哪些文件处于什么状态
Changes to be committed 要提交的更改
Changes not staged for commit 未准备提交的更改

添加文件与目录

添加指定文件到暂存区
$ git add [file1] [file2] …
添加指定目录到暂存区,包括子目录
$ git add [dir]
添加当前目录的所有文件到暂存区
$ git add .

移除文件与目录(撤销)

#直接从暂存区删除文件,工作区则不做出改变
git rm --cached
#如果已经用add 命令把文件加入stage了,就先需要从stage中撤销
git reset HEAD …
#移除所有未跟踪文件,一般会加上参数-df,-d表示包含目录,-f表示强制清除。
git clean [options]
#只从stage中删除,保留物理文件
git rm --cached readme.txt
#不但从stage中删除,同时删除物理文件
git rm readme.txt
#把a.txt改名为b.txt
git mv a.txt b.txt

查看提交历史

git log #查看提交日志

git文件操作图解

git语法及github的使用

git分支

分支其实就是一个commit链,一条工作记录线,每一个version都有一个sha-1值,每一次提交都会产生一个sha-1值且保存上一个,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,master:指向当前提交(commit),HEAD:指向当前分支(HEAD->分支名)

git branch -a: -a选项查看所有分支
git branch 分支名:创建分支
git checkout 分支名:切换分支
git checkout -b 分支名:创建新分支并切换
git branch -d 分支名:删除分支(不能删除当前分支)

合并分支
合并分支就是对分支的指针操作

#下载远程仓库的所有变动,不会自动merge
$ git fetch [remote]
#取回远程仓库的变化,并与本地分支合并
$ git pull [remote] [branch]
#上传本地指定分支到远程仓库
$ git push [remote] [branch]
#增加一个新的远程仓库,并命名
$ git remote add [shortname] [url]
#修改远程仓库
git remote rename [oldname] [newname]
#删除远程仓库
$git remote rm [remote-name]

git remote

git要求每个远程主机都必须指定一个主机名,git remote命令就用于管理主机名
git remote 不带选项的时候,git remote命令列出所有远程主机
git remote -v #显示所有远程仓库
git remote add <主机名> <网址> 用于添加远程主机
git remote rm <主机名> 用于删除远程主机
git remote rename <原主机名> <新主机名> 用于远程主机的改名