git & github 菜鸟笔记
1、概念:
最先进的分布式版本控制系统
文件修改该提交的内容:---版本 文件名 用户 说明 日期
GitHub网站上线了,它为开源项目免费提供Git存储
--CVS及SVN都是集中式的版本控制系统,而Git是分布式版本控制系统
集中:代码在中央服务器上,获取最新,编辑,上传;互联网网速可能慢;
分布:没有“中央服务器”,每人有完整的版本库,有一台充当“中央服务器”的电脑,作用仅仅是用来“交换”修改。
2、安装:
Linux上安装Git
测试:$ git
The program 'git' is currently not installed. You can install it by typing:
sudo apt-get install git
直接通过源码安装。先从Git官网下载源码,然后解压,依次输入:./config,make,sudo make install这几个命令安装就好了。
Windows上使用Git,可以从Git官网直接下载安装程序,(网速慢的同学请移步国内镜像)
安装完成后,在开始菜单里找到“Git”->“Git Bash”;
安装完成后,还需要最后一步设置,在命令行输入:
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
3、版本库
仓库,repository;简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
mkdir mygit 创建目录;
pwd 显示当前目录;
git init命令把这个目录变成Git可以管理的仓库
--目录默认是隐藏的,用ls -ah命令就可以看见。
把文件添加到版本库
--只能跟踪文本文件的改动 (Word格式是二进制格式)
文件放在仓库目录或子目录下,
$ git add readme.txt 把文件添加到仓库
$ git commit -m "wrote a readme file" 把文件提交到仓库
-- -m后面输入的是本次提交的说明,从历史记录里方便地找到改动记录。
-- 1 file changed:1个文件被改动(我们新添加的readme.txt文件);2 insertions:插入了两行内容(readme.txt有两行内容)。
可以add多个文件,一次commit;
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."
4、修改 回退
git status命令可以让我们时刻掌握仓库当前的状态
git diff 看看具体修改了什么内容 ,查看difference
快照在Git中被称为commit;
git log 历史记录
--pretty=oneline参数:
commit id(版本号)
HEAD表示当前版本
HEAD^,上上一个版本就是HEAD^^ ,HEAD~100;
$ git reset --hard HEAD^ 退回上个版本
cat 查看;
$ git reset --hard 1094a 指定回到特定 id 的某个版本;
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向append GPL:改为指向add distributed:
git reflog用来记录你的每一次命令;
5、工作区、暂存区
工作区(Working Directory)
版本库(Repository) 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
Untracked files:从来没有被添加过
6、管理修改
Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件。
1.git diff commit_id_1 commit_id_2
用来比较2个commit之间区别
2.git diff
检查的是工作区与暂存区的差异【没add之前】
3.git diff --staged
暂存与仓库的差异【add之后,commit之前】
4 git diff HEAD 工作区 与 版本库
-----------------------版本库--------------------------------------------
| |
git diff --cached |
| |
-------------暂存区---------------------- git diff HEAD
| |
git diff |
| |
-----工作区--------------------------------------------------------------
7、撤销修改
git checkout -- file可以丢弃工作区的修改:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。
git reset HEAD <file>可以把暂存区的修改撤销掉(unstage),重新放回工作区:
8、删除文件
rm命令删本地,
git add/rm 把本地的删除 放到缓存区;
git commit -m "..." 执行缓存区内容;
--git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
9、远程仓库
GitHub,提供Git仓库托管服务,本地Git仓库和GitHub仓库之间的传输是通过SSH加密的。
第1步:创建SSH Key; 打开Shell(Windows下打开Git Bash),
$ ssh-keygen -t rsa -C "youremail@example.com"
在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件;
第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:
然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:
GitHub允许你添加多个Key。免费托管的Git仓库,任何人都可以看到;
添加远程库
本地创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作,。
找到“Create a new repo”按钮,创建一个新的仓库:
接着有3种选择: 1新建本地库,关联到github, 2已有本地库关联,3从别人那关联
关联一个远程库: git remote add origin https://github.com/oscarDacude/xx.git
推送master分支: git push -u origin master
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
提示出错信息:fatal: remote origin already exists.
--删除 $ git remote rm origin
克隆 $ git clone https://github.com/oscarDacude/hellogit.git
GitHub给出的地址不止一个,还可以用https://github.com/michaelliao/gitskills.git这样的地址。实际上,Git支持多种协议,默认的git://使用ssh,但也可以使用https等其他协议。
使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https。
10、分支管理
你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。
Git鼓励大量使用分支:
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。
主分支,即master,HEAD严格来说不是指向提交,而是指向master,HEAD指向的就是当前分支。
创建新的分支,例如dev时,Git新建了一个指针叫dev,
删除dev分支就是把dev指针给删掉,
--Fast-forward信息,这次合并是“快进模式”
git & github 菜鸟笔记的更多相关文章
- git/github学习笔记
郑重提示,本文来自这里,如果喜欢,请关注原作者. 1. git 版本控制系统 相比CVS\SVN优势: - 支持离线开发,离线Repository- 强大的分支功能,适合多个独立开发者协作- 速度块 ...
- 【Git/GitHub学习笔记】基本操作——创建仓库,本地、远程同步等
近日想分享一些文件,但是用度盘又太麻烦了(速度也很恶心).所以突发奇想去研究了下GitHub的仓库,这篇文章也就是一个最最最基础的基本操作.基本实现了可以在GitHub上存储文本信息与代码. 由于我的 ...
- HIT2019春软件构造->Git&Github学习笔记
由于软件构造课程需要,学习使用git,以下作为学习笔记. 一.Git初始化及仓库创建和操作 1.基本信息设置(设置签名) 命令 项目级别/仓库级别:仅在当前本地库范围内有效 git ...
- 【Git/GitHub学习笔记】一键更新多个git仓库至远程
因为同时在本地维护几个Github的仓库,每次更新后每个仓库要重复三步提交同步,有点麻烦. 发现可以写.sh文件来实现一键更新. 比如我要更新我的BlogBackup和CodeRepo两个仓库的代码如 ...
- git/github 使用
原文:http://www.cnblogs.com/fnng/archive/2011/08/25/2153807.html git/github学习笔记 Posted on 2011-08-25 2 ...
- 【转载】git/github初级运用自如
之前了解过github,并在上面看了一些项目的源代码,于是自己也在github上创建了账户,希望以后有机会也把自己的项目托管在上面去.但是前提你要先了解git/github,下面的内容是从我的好基友虫 ...
- git/github初级运用自如(转自:虫师)
注:本文来源于 虫师博客(http://www.cnblogs.com/fnng/archive/2012/01/07/2315685.html) ,内容详尽,真实有用. 另:发一个github使用教 ...
- Git & Github 一页简明笔记
由于小组工程需要使用git&github的版本控制来协作,但我对其使用并不熟悉,特此写篇一页的笔记放在手边,备随时查阅. 相信这种一页的简明笔记,对大家也是有帮助的.我的笔记总结自廖雪峰的Gi ...
- Git & Github 一页简明笔记(转)main
由于小组工程需要使用git&github的版本控制来协作,但我对其使用并不熟悉,特此写篇一页的笔记放在手边,备随时查阅. 使用方法:常用命令供随时查阅,其余内容供新手了解. 0. 常用命令一览 ...
随机推荐
- hadoop权威指南(第四版)要点翻译(4)——Chapter 3. The HDFS(1-4)
Filesystems that manage the storage across a network of machines are called distributed filesystems. ...
- Procedure for installing and setting Sun JDK Java on Default Amazon Linux AMI
# First verify the version of Java being used is not SunJSK. java -version # Get the latest Sun Ja ...
- ElasticSearch「1」本地安裝Elasticsearch 6.0.1 + Elasticsearch-head插件
# 下載包 https://www.elastic.co/downloads/past-releases/elasticsearch-6-0-1 https://github.com/mobz/ela ...
- Js随机生成指定长度字符串
function a(a) { var d, e, b = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789&q ...
- Git 工作区、暂存区和版本库
基本概念 我们等来理解下Git工作区.暂存区和版本库概念 工作区:就是你在电脑里能看到的目录 强烈推荐git新手阅读 暂存区:英文叫stage,或index.一般存放在igt 目录下的index文件( ...
- nodejs express route 的用法
express 中文社区:http://expressjs.jser.us/community.html nodejs express route 的用法 1. 首先是最基本的用法. 1 2 3 4 ...
- php5 升级 php7 版本遇到的问题处理方法总结
为了能够更好的提升系统的安全性,把原来的进销存系统源码升级,遇到了一些问题在这儿总结一下: 1.mysql引擎在php7中不在支持会导致以下错误 Uncaught Error: Call to a m ...
- Android开发——跟随手指的小球实现
今天要实现的是一个跟随手指的小球,说白了就是让小球按着手指滑动的轨迹运动,实现起来还是比较容易的. 用到的类是drawView,我们先自定义一个DrawView组件. DrawView.java: ...
- NOJ 1012 进制转换(十进制转换成随意进制)
题目: 进制转换 时间限制(普通/Java) : 1000 MS/ 3000 MS 执行内存限制 : 65536 KByte总提交 : 1819 測试通过 : ...
- DataURL与File,Blob,canvas对象之间的互相转换的Javascript (未完)
canvas转换为dataURL (从canvas获取dataURL) var dataurl = canvas.toDataURL('image/png'); var dataurl2 = canv ...