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. 常用命令一览 ...
随机推荐
- eclipse下的tomcat内存设置大小(转)
步骤: 1.点击Run 2.选择Run Configurations, 3.系统弹出设置tomcat配置页面,在Argument中末尾添加参数中的VM arguments中追加: -Xms256M - ...
- spring声明式事务以及配置
使用spring提供的事务处理机制的好处是程序员可以不用关心事务的切面了,只要配置就好了,可以少写代码. spring声明式事务处理 spring 声明:针对的是程序员,程序员告诉spring容器,哪 ...
- 批量删除git分支
本篇文章由:http://xinpure.com/bulk-delete-git-branching/ 批量删除git分支 使用 git 时候,经常会发现,不知不觉就创建了大量的分支.那么,麻烦事就来 ...
- sqlite 小刀 初试
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中.它是D.RichardHipp建立的公有领域项目.它的设计目标是嵌入式的,而且目前已经在很多嵌入式产 ...
- C#设计模式学习笔记-单例模式随笔
最近学习 设计模式,从单例模式入手 啥是单例模式: 要实现一个单例类的话,首先,肯定是不能让用户自行生产的,那就是说明不能让用户new,所以,就必须把构造函数设置成为私有的 因为静态变量的生命周期跟整 ...
- 已知的问题:本文总结了与Telerik UI for ASP.NET Core相关的所有已知问题。
ASP.NET Core Framework 不支持数据表. 有关此限制的更多信息,请参阅dotnet / corefx#1039. 不支持本地化资源. 有关此限制的更多信息,请参阅dotnet / ...
- MySQL主从(MySQL proxy Lua读写分离设置,一主多从同步配置,分库分表方案)
Mysql Proxy Lua读写分离设置 一.读写分离说明 读写分离(Read/Write Splitting),基本的原理是让主数据库处理事务性增.改.删操作(INSERT.UPDATE.DELE ...
- tomcat 工作原理简析
https://github.com/HappyTomas/another-tutorial-about-java-web/blob/master/00-08.md 在00-02.理解HTTP中给出了 ...
- myeclipse的user library不自动部署到WEB-INF/lib目录下的解决办法
右键进入项目属性 Properties 点进去 左边 MyEclipse -> Deployment Assembly 右边 Add -> JavaBuild Path Entries - ...
- [k8s]简单启动一个k8s集群
简单启动一个k8s集群 kube-master mkdir -p /root/logs/api-audit /root/logs/controller /root/logs/scheduler kub ...