git的使用

Git的使用

首先登录https://git.oschina.net,如没有账号进行注册.

Git简单介绍

Git是一款免费,开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大得项目.

理解分支的概念:

分支像开发中的有向图,每个开发人员都是一个分支,这样不影响别人的开发,也安全.

Git与SVN的区别

SVN是集中式版本控制系统,版本库值集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器那里得到最新的版本,然后干湖,干完后,需要把自己做完的活推送到中央服务器.集中式版本控制系统必须联网才能正常工作,如果在局域网还可以,宽带够大,速度够快.如果在互联网下,如果网速慢的话,就纳闷了.

Git是分布式版本控制系统,那么它就没有中央服务器,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上,既然每个人都有一个完整的版本库,那么多个人如何协作?比如说自己在电脑上修改了文件A,其他人也在电脑上修改了文件A,这时候,你们两个只需把各自修改的推送个对方,就可以看到对方的修改了.

常用命令

pwd显示当前目录的路径

git status 本地状态查询

git add 提交修改文件

git commit -m "message"   message换成你修改的信息,中英文都可以

注意: 这一点必须要写清楚本次修改及增加的内容

git config --global user.email  "shenying@m14.cn"  "换成你的邮箱"

git config --global user.name "shenying"   "换成你的名字"

git branch 查看当前所有的分支

git branch -a 查看所有分支

拉去代码时用git fetch + git rebase 不要用git pull

git fetch 从远程git库拉去代码

git rebase origin

git push origin 

git fetch :相当于是从远程获取最新版本到本地,不会自动merge

git pull: 相当于是从远程获取最新版本并merge到本地

git pull origin master

上述命令其实相当于git fetch 和 git merge

在实际使用中,git fetch 更安全些

因为merge前,我们可以查看更新情况,然后在决定是否合并

Git 基本常用命令

Mkdir                    : XX(创建一个空目录 XX指目录名)

pwd                      : 显示当前目录的路径

git init                   : 把当前的目录变为可以管理的git仓库生成隐藏的.git文件

git add XX           : 把文件添加到暂存区去.

git commit -m "XX"     : 提交文件-m后面的的是注释.

git status                      :查看仓库状态

git diff XX                     : 查看XX文件修改了哪些内容

git log                           : 查看历史记录

git reset --hard HEAD^^ 或者git reset --hard HEAD~     回退到上一个版本

git reset --hard HEAD~2 回退到第二个版本

cat XX                        : 查看XX文件内容

git reflog                    : 查看历史记录的版本号id

git checkout XX         :把文件在工作区的修改全部撤销.

git rm XX                     : 删除XX文件

git remote add origin https://github.com/RainbowWait/Swift_Class_3-.git 关联一个远程库

git push -u (第一次使用-u,以后不需要) origin master        :  把当master分支推送到远程库

git clone https://github.com/RainbowWait/Swift_Class_3-.git 从远程库中克隆

git checkout -b dev               : 创建dev分支,并切换到dev分支上

git branch                               :查看当前所有的分支

git checkout master              :切换回master分支 

git merge dev                         : 在当前的分支上合并dev分支

git branch -d dev                   : 删除dev分支

git branch name                     : 创建分支

git stash                                  : 把单钱的工作隐藏起来,等以后恢复现场后继续工作

git stash list                            : 查看所有被隐藏的文件列表

git stash apply                        : 恢复被隐藏的文件,但是内容不删除

git stash drop                         :  删除文件

git stash pop                          : 恢复文件的同时也删除文件

git remote                               :查看远程库的信息

git remote -v                          :查看远程库的详细信息

git push origin master           :Git会把master分支推送到远程库对应的远程分支

git add .                                   : 提交修改的所有文件

git tag                                      : 显示 标签

git tag v1.4-lw                        : 轻量级标签

git tag -a v1.4 -m "my version 1.4"  :附注标签

git tag -v v1.4.2.1                               : 验证 标签

git tag -a v1.2 9fceb02                     : 加注标签

git push origin v1.5         

git push origin --tags                       :分享标签



工作区,仓库,和暂存区

什么是工作区?工作区就是我们磁盘上的一个工作目录

什么是仓库?就是工作区中的一个隐藏目录.git(这个隐藏文件),这个不算是工作区部分,而是Git仓库.

暂存区是一个文件,保存了下次将提交的文件列表信息,一般在Git仓库目录中.有时候也被称作"索引",不过一般说法还是叫暂存区域.

用户信息配置

git config --global user.name zxy

git config --global user.email 1126200379@qq.com


日志中文显示

当我们在命令行中使用git status,git log 等输出的时候.如果操作目录是中文名称,就会产生乱码.可以通过配置支持中文的显示来正常显示中文

git config core.quotepath false

日志颜色配置

git config --global color.ui false 表示开启 跟终端的颜色一样

git config --global color.ui true 表示关闭 颜色为红色


检查配置信息

如果想要检查你的配置,可以使用git config --list命令,来列出所有Git当前环境能够找到的配置信息.


可能会看到重复的变量,因为Git会从不同级别的文件中读取同一个配置.

可以通过git config <key> : 来检查Git的某一项的最终配置

创建本地仓库        git init

该命令将创建一个名为.git的子目录(隐藏目录,可以用ls -a查看,.git的目录结构如图),这个目录含有初始化的Git仓库中所有的必须文件,这些文件是Git仓库的骨干.但是,此时我们仅仅是做了一个初始化的操作,项目的文件还没有被跟踪.


添加到暂存区,提交到本地仓库

这里在 test 目录下执行git init命令,所以该工程下的所有文件可以执行版本操作了.可以通过git add 命令来指定文件或所有的文件添加到暂存区,然后执行git commit 提交到本地仓库.

git add .  

 '.'表示添加当前目录及及其子目录的所有修改到暂存区.这种写法在实际开发中非常实用,尤其有很多文件要提交的时候,不必 git add  文件名   这样逐一地列出来.另一个常用的方式是,递归添加符合格式的文件,如 git add \*.docx,如果不带有'\'仅是当前目录

git commit -m "备注"

GitHub的SSH公钥配置

1、首先需要检查你电脑是否已经有 SSH key

cd ~/.ssh

ls

这两个命令就是检查是否已经存在 id_rsa.pub 或 id_dsa.pub 文件,如果文件已经存在,那么你可以跳过步骤2,直接进入步骤3。如果一切顺利的话,可以在用户主目录找到~/.ssh目录,里面有id_rsa 和id_rsa.pub两个文件.这两个就是SSK Key的密钥对,id_rsa是私钥,不能泄露出去,id_rsa_public是公约,可以放心地告诉任何人.你需要把邮件地址换成自己的邮件地址,然后直接按Enter键,使用默认值即可,由于Key并不是用于机密目的,所以不用设置密码.

2、创建一个 SSH key

ssh-keygen -t rsa -C"your_email@example.com"

代码参数含义:

-t 指定密钥类型,默认是 rsa ,可以省略。

-C 设置注释文字,比如邮箱。

-f 指定密钥文件存储文件名。

以上代码省略了 -f 参数,因此,运行上面那条命令后会让你输入一个文件名,用于保存刚才生成的 SSH key 代码,如:

Generatingpublic/privatersa key pair.

# Enter fileinwhich to save the key (/c/Users/you/.ssh/id_rsa): [Press enter]

当然,你也可以不输入文件名,使用默认文件名(推荐),那么就会生成 id_rsa 和 id_rsa.pub 两个秘钥文件。

接着又会提示你输入两次密码(该密码是你push文件的时候要输入的密码,而不是github管理者的密码),

当然,你也可以不输入密码,直接按回车。那么push的时候就不需要输入密码,直接提交到github上了,如:

Enter passphrase (emptyforno passphrase):

# Enter same passphrase again:

接下来,就会显示如下代码提示,如:

Your identification has been savedin/c/Users/you/.ssh/id_rsa.

# Yourpublickey has been savedin/c/Users/you/.ssh/id_rsa.pub.

# The key fingerprintis:

#01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db your_email@example.com

当你看到上面这段代码的收,那就说明,你的 SSH key 已经创建成功,你只需要添加到github的SSH key上就可以了。

3、添加你的 SSH key 到 github上面去

a、首先你需要拷贝 id_rsa.pub 文件的内容,你可以用编辑器打开文件复制,也可以用git命令复制该文件的内容,如:

cat ~/.ssh/id_rsa.pub

b、登录你的github账号,从又上角的设置(Account Settings)进入,然后点击菜单栏的 SSH key 进入页面添加 SSH key。

c、点击 Add SSH key 按钮添加一个 SSH key 。把你复制的 SSH key 代码粘贴到 key 所对应的输入框中,记得 SSH key 代码的前后不要留有空格或者回车。当然,上面的 Title 所对应的输入框你也可以输入一个该 SSH key 显示在 github 上的一个别名。默认的会使用你的邮件名称。


关联远程仓库

上一步的Github的配置是基础.截止目前,你已经在本地仓库创建了一个Git仓库,接着需要把本地的仓库与Github的仓库关联.如果这两个仓库进行了远程同步,Github上的仓库就可以作为本地备份,又可以让其他人通过该仓库来协作,真是一举多得.

1.创建一个远程仓库


2.在Repository name 填入 Swift_Class_3集合,其他保持默认设置,点击Create repository按钮,就成功地创建了一个新的Git仓库.

3.目前在Github上的这个Swift_Class_3集合仓库是空的.Github告诉我们,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,把本地仓库的内容推送到Github仓库.在工作区test中执行下面的命令,注意地址要正确,地址可以在文本中复制.


git remote add origin https://github.com/RainbowWait/Swift_Class_3-.git 

git config --list //查看所有配置的结果

git push -u origin master  //第一次使用

git push origin master //后面使用

由于远程是空的,第一次推送master分支时,加上-u参数.Git不但会把本地master分支内容推送到远程新的master分支上,还会把本地的maser分支和远程的master分支关联起来,以后的推送或者拉取时就可以使用简化的命令:git push origin master     

查看当前工作区的文件状态

要查看哪些文件处于什么状态,可以使用git status命令.如果在克隆仓库后立即使用此命令,会查看到类似这样的输出,

在master的分支上,你的分支和服务器上的分支一样新,工作区也是干净的.现在修改一下ViewController.swift文件,再次执行git status命令,如图


说明已跟踪文件的内容发生了变化,并用红色标记了正处于修改状态,但还没有放到暂存区.要暂存这次更新,需要执行git add命令


放到暂存区后执行git status命令,变为绿色状态

然后在运行提交命令git commit  -m "注释内容"


再执行git status命令,查看结果是没有可提价的文件

查看提交历史

在提交了若干更新,或者克隆了某个项目之后,你也许想回顾一下提交的历史记录.完成这个任务最简单而又最有效的工具是git log命令

默认不适用任何参数的话,git log会按提交的时间列出所有的更新,最近的更新排在最上面.这个命令会列出每个提交的SHA-1校验,作者的名字,电子邮件,提交时间以及提交说明.

git log 有许多选项可以帮助你搜寻所有要找的提交,一些常用的选项如下所示:

git log -p        表示按补丁格式显示每个提交之间的差异

git log -数字   表示显示最近几次提交

git log --stat  表示显示每次更新的文件修改统计信息

git log --shortstat 表示只显示--stat中最后行数修改添加移除统计

git log --name-only 表示仅在提交信息后显示已修改的文件清单

git log --abbrev-commit 表示仅显示SHA-1前几个字符,而非所有的40个字符

git log --relative-date 表示使用较短的相对时间显示(比如,"2 week ago")

git log --graph 表示显示ASCII图形表示分支合并历史

git log --pretty 表示使用其他格式显示历史提交信息.可用的选项包括oneline,short,full,fuller和format(后跟格式)

git log X-height 基线至非突出的小写字母(如a,x,e等)最高点的距离

git log Cap height 基线至大写字母最高点的距离

撤销操作

1.修正上次的提交

有时候我们提交完了才发现漏掉了姐文件没有添加,或者提交信息写错了,此时可以运行带有--amend选项的提交命令,尝试合并到上一次提交:

git commit -m "修改"

git add 文件

git commit --amend -m "打印测试日志"



最终你只会有一个提交,第二次提交将会合并到第一次提交的结果中,如图第一次提交为修改,第二次合并了第一次,为打印测试日志

2.撤销工作区中的文件修改

git checkout 文件名 //撤销某个文件

git checkout .          //撤销修改的全部内容


第一次我修改了AppDelegate.swif 和 ViewController.swift这两个文件,然后我执行git checkout .全部指令,查看状态git status 没有可提交的内容,撤销成功

第二次我修改了 ViewController.swift 这个文件,然后执行git checkout Swift_Class_3集合/Swift_Class_3集合/ViewController.swift  git status 查看状态,没有可提交的内容,撤销成功

3.撤销暂存区中的文件的修改

这里的操作是把暂存区的修改撤销到工作区中,  git reset HEAD 文件名  (或者git reset 文件名)   来取消暂存.还可以按照上边的步骤继续从工作区中撤销 git reset 用来撤销最后一次的git add files


4.撤销仓库区

撤销仓库区就是git commit 后的操作撤销到指定的版本,使用(git reset  版本号) 指令,查看版本号使用git reflog 指令,前面变色的就是版本号


1、git reset命令后面需要加2种参数:"--hard"和"--soft",如果不加,默认情况下是"--soft"。

2、--soft表示该条commit号之后(时间作为参考点)的所有commit的修改都会退回到git缓冲区中。所以使用git status命令可以在缓冲区中看到这些修改。



3、"--hard"则表示缓冲区中不会存储这些修改,git会直接丢弃这部分内容,但需要注意的一个问题是:这样的重置是直接在本地的修改,无法提交到远程服务器,如果直接丢弃的内容已经被推到远程服务器上了,则会造成本地和服务器无法同步的问题,即git reset --hard只能针对本地操作,不能针对远程服务器进行同样操作。如果从本地删掉的内容没有推到服务器上,则不会有副作用,如果被推到服务器,则下次本地和服务器进行同步时,这

部分删掉的内容仍然会回来。

(其实这个问题则可以很好的被git revert 命令解决,使用git revert + commit号,该命令撤销对某个commit的提交,这一撤销动作会作为一个新的修改存储起来,这样,当你和服务器同步时,就不会产生什么副作用。)



推荐阅读更多精彩内容

  • Git和Github学习 1.创建版本库 安装git,至于这个话题就不细说了,按照你电脑的操作系统下载一个合适的g...
    郭子web阅读 66评论 0 0
  • 一、git简介 git是目前世界上被最广泛使用的现代软件版本管理系统。git本身亦是一个成熟并处于活跃开发状态的开...
    s_在路上阅读 2,081评论 0 10
  • 1.git的安装 1.1 在Windows上安装Git msysgit是Windows版的Git,从https:/...
    落魂灬阅读 4,785评论 2 43
  • 1. 安装 Github 查看是否安装git: $ git config --global user.name "...
    Albert_Sun阅读 7,600评论 7 154
  • 他 在这个城市呆了十年 从校服到正装 从20到30 他见识过这个城市的每一寸天色 不见得这个城市能留得你 这个城市...
    秦君一阅读 22评论 0 0