git&github--基础认识(一)[云图智联]

1 git简介

  1. git为分布式版本控制系统,svn是集中式版本控制系统
  2. 集中式:版本库存放在中央服务器,工做时,用本身电脑先从中央服务器取得最新的版本,干完活后,再把本身的活推送给中央服务器
  3. 分布式版本控制系统:没有中央服务器,每一个人的电脑上都是一个完整的版本库,当你在本身电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,大家俩之间只需把各自的修改推送给对方,就能够互相看到对方的修改了。但在实际使用分布式版本控制系统时,其实不多在两人之间的电脑上推送版本库的修改,由于可能两人不在一个局域网内,两台电脑互相访问不了,也可能今天你的同事病了,他的电脑压根没有开机。所以,分布式版本控制系统一般也有一台充当“中央服务器”的电脑,但这个服务器的做用仅仅是用来方便“交换”你们的修改,没有它你们也同样干活,只是交换修改不方便而已

2 git中的几个重要概念

  1. 工做区:你在电脑里能看到的目录
  2. 版本库:工做区中一个隐藏的".git"文件就是Git的版本库,版本库中包含如下重要内容git

    1. 暂存区(stage)
    2. Git自动建立的master分支,以及指向master的指针HEAD

image.png

3 git基本功能

  1. 由于Git是分布式版本控制系统,因此,每一个机器提交时都必须自报家门,可使用以下命令设置你的名字和Email地址
#这个命令,会在"~/.gitconfig"文件中添加信息
#--global参数,用了这个参数,表示你这台机器上全部的Git仓库都会使用这个配置
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
  1. 版本库又名仓库,英文名repository,你能够简单理解成一个目录,这个目录里面的全部文件均可以被Git管理起来
#将当前目录变成Git能够管理的仓库,命令执行后,当前目录下多了一个.git隐藏文件
git init
  1. 将文件添加到暂存区
git add 文件名
  1. 将暂存区全部文件提交到当前分支
#若是不执行git add,而直接执行git commit,那么修改内容不会被提交。也就是说git commit只负责把暂存区的修改提交
git commit -m "本次提交的说明"
#同时完成git add和git commit两个操做
git commit -am README.md
  1. 从近到远显示提交日志
git log
#省略一些没必要要信息
git log --pretty=oneline
  1. 还原到指定版本
#1. HEAD指向当前分支master的最后一次提交
#2. HEAD^指向当前分支master的上一次提交
#3. HEAD^^表示上两个,HEAD~100表示上100个
#4. 注意,若是使用git reset从版本10,退回到版本5,在版本5中使用git log命令,就没法显示6-10版本的相关信息,例如commit id
git reset --hard HEAD^
  1. 前进到指定版本
#1. 用来记录你的每一次命令,在这里能找到以前提交的commit id
git reflog
#2. 利用commit id前进到指定版本,最后一个参数为commit id,是一个哈希值,写4位以上便可
git reset --hard 1094a
  1. 查看工做区与暂存区(当前版本)区别
git diff
#比较工做区与当前版本(已commit中内容)区别
git diff HEAD
#比较工做区与当前版本中指定文件区别
git diff HEAD -- 文件名

9.撤销工做区的修改github

  1. 若是文件自修改后尚未被放到暂存区,会将该文件撤销到和最新版本库中内容相同
  2. 若是文件已被放到暂存区后又作了修改,会将该文件撤销到放到暂存区后的状态
#若是不加"--"",就变成了"切换到另外一个分支"的命令
git checkout -- readme.txt

10.撤销暂存区的内容服务器

#注意这是将git add操做撤销,而上面是撤销工做区的修改,其实本质上就是恢复到了指定的版本
git reset HEAD readme.txt

11.从版本库中删除文件ssh

#1. 先在工做区删除,若是此步骤为误删,可使用上面介绍的git checkout -- readme.txt恢复工做区内容
rm test.txt
#2. 在暂存区中提交删除
git rm test.txt
#3. 提交到版本库
git commit -m "remove test.txt"

12.查工做目录和暂存区的状态,和git log区别在于,后者用于查看commit的信息,前者用于查看当前目录与最新版本的区别,以及暂存区与最新版本的区别分布式

git status

4 github使用

4.1 在github上建立帐户

4.2 设置 SSH Key

1.使用https url和SSH url均可以将远程项目克隆到本地svn

2.使用ssh克隆时,你必须是你要克隆的项目的拥有者或管理员,且须要先添加 SSH key ,不然没法克隆fetch

3.能够先使用本身电脑建立SSH key公钥和私钥,而后将公钥告诉给github,这样,就能够在本身的电脑上,经过ssh协议,使用私钥来访问github的服务器了url

4.设置流程
1.本机建立建立一个 SSH keyspa

#-t 指定密钥类型,默认是 rsa ,能够省略。
#-C 设置注释文字,好比邮箱。
#-f 指定密钥文件存储文件名,默认文件名为id_rsa(私有密钥)和id_rsa.pub(公开密钥)
ssh-keygen -t rsa -C "your_email@example.com"
#Generating public/private rsa key pair.
#Enter file in which to save the key
#(/Users/your_user_directory/.ssh/id_rsa):
#按回车键
#Enter passphrase (empty for no passphrase):
#输入push文件的时候要输入的密码,能够不输密码直接回车
#Enter same passphrase again:
#再次输入密码

2.github上添加公开密钥,从此就能够用私有密钥进行认证了,在SSH Keys中粘贴 id_rsa.pub 文件里的内容版本控制

cat ~/.ssh/id_rsa.pub
  1. 修改私钥密码
cd ~/.ssh
#修改私钥,执行命令后提示输入密码,两次都直接回车就能够去掉密码,去掉密码后,git push就再也不须要输入密码
ssh-keygen -p -f id_rsa

4.3 在github上建立仓库:Create repository

4.4 从远程仓库克隆到本地

#此处也可使用https协议克隆
#克隆后,Git会自动把本地的master分支和远程的master分支对应起来了,远程仓库的默认名称是origin
git clone git@github.com:michaelliao/gitskills.git
#查看远程库信息
git remote
#查看远程库详细信息,若是没有推送权限,就看不到push的地址
#origin  git@github.com:michaelliao/learngit.git (fetch)
#origin  git@github.com:michaelliao/learngit.git (push)
git remote -v
#删除远程库
git remote rm origin

4.5 若是已经存在本地仓库,也能够额为本地库添加远程仓库

#1. 建立本地库
#2. 在github上建立仓库
#3. 为本地库关联远程库
    #1. 注意michaelliao必须是本身的仓库,若是是别人的,虽然能加上,但push不上去,由于你的SSH Key公钥不在他人的帐户列表中
    #2. 添加后,origin为远程仓库别名,这是Git默认的叫法,也能够改为别的
git remote add origin git@github.com:michaelliao/learngit.git

4.6 本地库与远程库内容交互

#1. 将本地库中当前分支推送到远程的master分支上
git push origin master
#2. 拉取
git pull origin master
相关文章
相关标签/搜索