zoukankan      html  css  js  c++  java
  • Git介绍与使用

    集中式vs分布式

    svn集中式:版本库是集中存放在中央服务器的,需要联网才能工作

    git 分布式:每个人的电脑上都是一个完整的版本库

    和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。

    基本命令

    初始化仓库:git init

    把文件添加到仓库:git add a.txt 添加到暂存区(state)

    把文件提交到仓库:git commit -m '注释信息'

    仓库状态:git status

    查看修改内容:git diff

    显示最近到最有远的提交日志:git loggit log --pretty=oneline

    版本回退

    • git reset --hard HEAD^ 回退到上一版本
    • git reset --hard HEAD^ 回退到上上版本
    • git reset --hard HEAD~100 回退到上100个版本
    • git reset --hard 具体版本号 回退到具体版本号

    记录每一次命令 : git reflog

    git checkout -- readme.txt

    命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

    一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

    一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

    总之,就是让这个文件回到最近一次git commitgit add时的状态。

    删除

    删除文件后,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了:

    现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm filename 删掉,并且git commit

    另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本: git checkout -- filename

    远程仓库

    git config -- global user.name 'GitHub用户名 '

    git config --global user.email '注册邮箱'

    ssh-keygen -t rsa -C 'GitHub的注册邮箱'

    git remote add origin 远程仓库地址 :关联远程仓库

    git remote rm origin :删除关联

    git push origin master : 推送 (第一次 加上-u 就会一直关联这个地址,就不需要再写origin master)

    git pull origin master --allow-unrelated-histories:如果本地仓库和远程库有冲突,比如GitHub上有markdown文件,则加上 --allow-unrelatered..

    git clone git@github.com:rottengeek/test.git:克隆远程库到本地

    分支

    git branch 分支名:创建分支

    git checkout 分支名:切换分支

    git checkout -b 分支名 :创建与切换同时进行

    git branch :列出所有分支

    git merge dev :把dev分支的工作成果合并到master分支上

    git branch -d 分支名 : 删除分支

    分支策略

    在实际开发中,我们应该按照几个基本原则进行分支管理:

    首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;

    那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;

    你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。

    所以,团队合作的分支看起来就像这样:

    clipboard.png

    多人协作

    clipboard.png

    Git使用

    安装与配置文档

    1.下载与安装

    • Windows系统:到 Git For Windowsgit-for-windows.github.io下载,傻瓜式下一步。
    • Linux系统:到 Download for Linux and Unix 下载,如果是Ubuntu的话,直接Terminal键入: sudo apt-get install git 安装。
    • Mac系统:到 Installing on Mac 下载,不过新系统貌似默认已经带有Git了,另外如果安装了Homebrew的话可以直接命令行键入:brew install git 进行安装。

    2.文档教程相关

    概念

    1 Git的四个组成部分

    ![1][1]

    2 文件的几个状态

    按大类划分,分为两种状态:Tracked(已跟踪)和Untracked(未跟踪),
    依据是:该文件是否已加入版本控制?

    流程简述:

    假设某个项目已加入版本控制系统

    1. 新建一个文件,该文件处于 Untracked 状态;
    2. 通过git add命令添加到缓存区,此时文件处于Tracked状态又或者说
      此时这个文件已经被版本控制系统所跟踪,而且他处于Staged(暂存)状态;
    3. 通过git commit命令把暂存区的文件提交提交到本地仓库,此时文件 处于Unmodified(未修改)状态;
    4. 此时如果去编辑这个文件,文件又会变成Modified(修改)状态

    3 远程仓库

    • Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上。首先找一台电脑充当服务器的角色,每天24小时开机,其他每个人都从这个“服务器”仓库克隆一份到自己的电脑上,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交。可以自己搭建这台服务器,也可以使用GitHub网站

    创建github账号

    • 本地Git仓库和GitHub仓库之间的传输是通过SSH加密的
    • step1:创建项目的SSH Key
      ssh-keygen -t rsa -C "youremail@example.com"
    • 创建完成后,在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH
      Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人
    • step2:* 登录github注册或登录账号,打开“settings”的“SSH Keys”页面,然后,点“New SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容,点“Add Key”,你就应该看到已经添加的Key

    创建远程库

    • 登陆GitHub
    • 在右上角找到“new repository”按钮,创建一个新的仓库

    从远程库克隆

    • 将github上的项目,克隆到本地一份
      git clone git@github.com:账号名/项目名.git

    与远程库交互

    • 从远程库获取到本地
      git pull
    • 将本地提交远程库
      git push origin master
    • 提示:每次提交前,需要先获取,解决冲突后再次提交

    4 本地仓库

    创建本地仓库

    • 创建空目录
    cd test7```
    
     - 目录结构图如下:
    ![创建本地仓库前][2]
     - 在目录下创建本地仓库
    `git init`
     - 创建成功后,目录结构如下图:
    ![创建本地仓库后][3]
     - 版本库就是一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”
    
    **文件管理**
    
     - 本地仓库分为三部分:工作区,暂存区,仓库区,其中暂存区、仓库区是版本库部分
     - 三个部分的操作及命令如下图
    ![本地操作][4]
    
    **工作区与暂存区**
    
     - 使用IDE打开目录,创建项目,将文件添加到暂存区
    `git add 文件1 文件2 ...
    git add 目录`
     - 使用暂时区的内容恢复工作区的内容
    `git checkout -- 文件名`
     - 查看暂存区的状态
    `git status`
    
    **暂存区与仓库区**
    
     - 将暂存区的记录添加到仓库区
    `git commit -m '本次提交的说明信息'`
     - 查看仓库区的历史
    

    当前版本的历史版本:git log
    简版显示:git log --oneline --graph
    历史命令:git reflog

     - 在Git中,用HEAD表示当前版本,也就是最新的提交3628164...882e1e0(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
     - 对比工作区和仓库区中某版本某文件的不同
    `git diff HEAD -- 文件名`
     - 回退历史版本到暂存区
    `git reset HEAD^或版本号`
    
    **删除文件**
    
     - 依次执行如下命令
    `rm 文件名
    git rm 文件名
    git commit -m '说明信息'`
    
    
      [1]:http://static.zybuluo.com/xiaomengdashi/m3i6iwvft4i8jxbj3441bpqw/image_1c3kf150nft76rl8hn1h9g1p099.png
      [2]: http://static.zybuluo.com/xiaomengdashi/nnuz3vhk3x6igadxww2ktbze/image_1cc89s591i953ar1cpp1okn7ku9.png
      [3]: http://static.zybuluo.com/xiaomengdashi/tfyal6fknn98u45zh1q5fugm/image_1cc89svb119ef1v971p6c18tq1eqbm.png
      [4]: http://static.zybuluo.com/xiaomengdashi/gafefojhrr8twctpiqbf3q1k/image_1cc89vo301k9b6lc1drj14pe11s13.png
  • 相关阅读:
    安装mysql
    date, Calendar
    心态
    jdbc ---- DBUTilDao 类
    jdbc--------JdbcUtilDao 类
    Python与C/C++相互调用
    用链表和数组实现HASH表,几种碰撞冲突解决方法
    用链表实现消息队列
    文件系统的发展
    [深度学习]开源的深度学习框架
  • 原文地址:https://www.cnblogs.com/kolane/p/11537892.html
Copyright © 2011-2022 走看看