一、git:一个免费的并且开源的分布式版本控制系统
版本控制:保留文件中修改的历史记录,可以方便的撤销||恢复之前对文件的操作修改。
版本控制带来的好处:
a.不小心删除文件,可以通过记录找回
b.产品经理反反复复让你修改的时候,可以通过版本控制轻松反复
c.清楚了解自己最近处理过哪些部分
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置
分布式版本控制:
单人开发项目的时候,我们可能为了方便,公司一台,家里一台,这时候我要使用同一个仓库进行记录。
我们可以选择使用U盘、网盘等存储设备进行拷贝。
但是一旦项目庞大,我们就这样的方式就很麻烦了,而且极有可能产生各种冲突问题。
分布式和集成式的对比:
集成式:
直接连通中央仓库,由中央仓库存储操作记录及项目代码,比如SVN
需要连接中央仓库、需要网络
记录保存在中央仓库,一旦中央仓库内的记录丢失,没有备份
分布式:
在每个人的电脑上都有一个.git本地仓库,操作记录保存在本地,如GIT
可无网络办公,等有网络再推送远程仓库
通过对比我们可以看出分布式版本控制,对于工作环境要求限制更少,对资料的保护性更好,不容易丢 失。所以越来越多的人抛弃SVN,走上了Git的道路
Github就充当了我们说的中央仓库。
当然在这里我们需要的只是中央仓库,这个仓库也可以Coding 、gitlab、Bitbucket 等等。

二、github:一个专门托管代码并且实现版本控制的软件,git比github早出现了3年,为开源项目免费提供Git存储

三、git的入门命令,使用Git Bash操作命令行
(1)、git init:初始化本地仓库;,通过git init命令把这个目录变成Git可以管理的仓库
通过这个命令,可以创建一个本地.git仓库,.git文件(默认是隐藏文件)
.开头的文件是隐藏文件,所以需要设置让其出现
touch a.txt //创建a.txt文件
git status:查看当前仓库所在目录的文件状态

on branch master:在哪个分支上
no commits yet:还没有提交过
untracked files:当前的这个文件是没有被追踪的,git当它是不存在的,通过命令:
(2)、git add a.txt:来将这个文件提交给git,告诉仓库,这是我需要你管理的东西。add是添加文件下所有的文件
通过这样的方式,我们可以把文件/文件夹托管给git

(3)、git commit
把文件/文件夹托管给仓库后,我们不能像编辑器一样,什么都让仓库进行记录,所以在这里,
我们采用主动提交的方式,去提交我们希望Git仓库记录的操作。
git commit
如果你是第一次进行提交,你会发现提交失败
因为Git除了需要你主动提交以外,还需要记录当前是谁提交的
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
在全局下设置用户email和name,只需要设置一次,后期提交的时候,会自动读取配置信息
git config --global -l 获取设置的邮箱和用户名

进入了vim编辑器,出现这种情况是因为,需要在commit的时候附带一个信息,描述你提交是做了什么的描述文字。按住i进入文字编辑插入模式 => 在最上面输入本地提交的描述信息

然后按下esc退出编辑插入模式 => 按下ZZ(大写)保存退出。
(4)、git log:查看已经提交的文件信息,所有批次的提交信息,按q退出,然后再接着输入命令

git log --pretty=oneline
git log --pretty=format:"%H %h"
通过git log 哈希值:可以只查看某一次的提交信息
git log -p:查看最近一次的提交信息,同时显示diff的信息,详细信息的打印
git log -2:只打印2条信息
以上操作都是操作本地仓库,untracked files不用管它
每次操作:
首先git status,查看文件状态,看看哪些文件修改了
然后git add,将修改文件提交到暂存区,
git add . 将本地仓库全部文件提交到暂存区
然后 git cimmit -m 描述文字,提交到本地仓库
以上操作步骤,缺一不可。
不过可以简写命令行:git commit -a -m '描述文字'(只有在文件是已经暂存的情况下才可以使用简写命令操作,untracked files是不可以直接使用简写命令行的,需要先add,然后commit,分开来)
(5)、git rm ‘文件名’:删除文件
git rm a.txt
git commit -m 删除a文件
☆如果文件在暂存区,也就是git add .,但是还没有git commit,那么是不允许删除该文件的,如果确实要删除,那么 :
git rm -f c.txt //强制删除
git commit -m 删除c文件
☆如果想把文件从git仓库删除,但是保留本地工作目录中的文件,也就是该文件从git仓库的文件变成了untracked files文件
git rm --cache a.txt
git commit -m 删除a文件
要想再次提交该文件到git仓库,先git add .,然后git commit -m 提交a文件
(6)、移动文件
新建文件夹:mkdir reci //创建了一个文件夹
git mv a.txt reci/a.txt //将a文件移动到reci文件夹下面
git add .
git commit -m 移动a文件到reci文件夹下
(7)、git status:打印文件状态(未追踪、已修改、已暂存)
git status -s = git status --short 简化文件状态打印内容

             **(8)、git diff**:查看文件修改了哪些地方 (主要看工作区文件)只在文件已经被修改,但是还未add的情况下,可以查看,如果已经add就不可以查看修改的情况了git diff --staged:查看暂存区和提交区域之间的差异 ** (9)、git reset**:返回文件到之前的版本git reset --hard HEAD^  //返回上一个版本git reset --hard HEAD^^  //返回上上一个版本git reset --hard HEAD~·100  //返回往上100个版本回退到未来的版本git reset --hard d93ccfb4a9f6a5971c4a2481f927202a4cf66d49  //对应版本的哈希值**(10)、git reflog**用来记录你的每一次命令,找到对应修改的commit id穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。**(11)、创建SSH Key**C:\Users\xiaoxiao\.ssh   这就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。**(12)、push提交代码到github**git push origin master,把本地master分支的最新修改推送至GitHub。**(13)、从远程库clone到本地库**git clone git@github.com:yourname/gitskills.git**(14)、常用命令行**$ pwd :(print working directory) 查看当前所在路径--绝对路径$ ls:(list) 查看当前目录下的内容$ mkdir(make directory) 创建目录$ touch 创建文件$ cat 查看文件内容(一次性将内容全部显示)$ q 退出$ clear 清屏**(15)、分支管理**在Git里,主分支,即master分支HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长;当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上。不过,从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变。假如我们在dev上的工作完成了,就可以把dev合并到master上。Git怎么合并呢?最简单的方法,就是直接把master指向dev的当前提交,就完成了合并。并完分支后,甚至可以删除dev分支。删除dev分支就是把dev指针给删掉,删掉后,我们就剩下了一条master分支。Git鼓励大量使用分支:查看分支:git branch创建分支:git branch name切换分支:git checkout name创建+切换分支:git checkout -b name合并某分支到当前分支:git merge name删除分支:git branch -d name
** (16)、错误集结**(a)。*git add readme.txt报错 pathspec 'readme.txt' did not match any files*说明在本地目录里没有这个文件。解决办法 1.手动创建一个文件 readme.txt2.然后再使用git命令创建这个文件,命令为:$ touch readme.txt3.$ git add readme.txt,不用管该文件路径**17、提交对象**


18、创建分支



git branch:查看当前所在的分支
git branch branch1:创建分支branch1
git checkout branch1:切换分支到branch1
git checkout -b branch1:合并操作,开分支并且切换到新分支

四、上传文件到github—远程仓库
1、首先新建仓库

仓库名称、仓库信息描述、公开还是私有、初始化一个readme文件、add .gitignore、add a license等等
2、新仓库创建完毕之后,会看到以下提示信息

2.1、git ssh原理以及与https的区别
HTTPS:不管是谁,拿到url随便clone,但是在push的时候需要验证用户名和密码【输入密码时git bash不会显示密码】;
SSH:clone的项目你必须是拥有者或者管理员,而且需要在clone前添加SSH Key。SSH 在push的时候,是不需要输入用户名的,如果配置SSH key的时候设置了密码,则需要输入密码的,否则是不需要输入密码的,推荐使用SSH密钥,谁想要参与当前项目的开发,就添加谁的SSH密钥
2.2、在git中使用SSH Key的步骤:

检查电脑是否存在SSH Key:
$ cd ~/.ssh
$ ls

如果存在id_rsa.pub 或 id_dsa.pub 文件,说明文件以及存在,跳过创建SSH Key步骤。

创建SSH Key
$ ssh-keygen -t rsa -C "your_email@example.com"
return后(出现如下命令)会让你输入push时的密码(不是git登录密码),一般推荐滤过,直接按enter:

Generating public/private rsa key pair.

出现如下命令说明SSH Key创建成功了:

复制代码

Your identification has been saved in /Users/shenheping/.ssh/id_rsa.
Your public key has been saved in /Users/shenheping/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:sodR52iO2z6KZOaHjElmjlGtTu8UbiZ2p+KXma4Rums shpyoucan@163.com
The key's randomart image is:
+---[RSA 2048]----+
. . .
. . . +
.... o S .
..o . O
.X+=X== o
.E%O+.+.
+oo**.ooo.

+----[SHA256]-----+

查看SSH Key:
$ cat ~/.ssh/id_rsa.pub

将查看的SSH Key赋值到git中设置好。

测试SSH Key:
$ ssh -T git@git.oschina.net

出现Welcome to XXX就可以了。

3、push本地文件到远程仓库
远程仓库的名称默认是origin,origin中有单独的master和HEAD分支,和本地仓库中的HEAD或master并非一致

git push 提交到远程仓库
git clone 克隆项目到本地,从无到有的过程 git https://github.com/xiaoxiao529/javascript-note.git
拉取的都是master分支上的内容
git pull 拉取 本地有远程项目,然后同事对远程项目又做了新的修改,就需要git pull,如果和本地的有冲突,就需要解决冲突

github上,创建新仓库,直接创建,不要点Initialize this repository with a README前面的选择框

创建.gitignore文件,里面写上规则,第一步!!如果是vue-cli,那么不用手动创建,已经创建好了。反正就是创建github仓库的时候,不要勾选初始化README文件!!
git add .
git commit -m 'webpack-word' 提交到暂存区不能少
git remote add origin git@github.com:xiaoxiao529/webpack-work.git
git push -u origin master 提交到远程仓库origin的master分支—主分支

★本次上传了node_modules到github,要避免上传,可以在目录下创建.gitignore文件,里面填写忽略的上传文件

.DS_Store
node_modules/
/dist/
npm-debug.log*
yarn-debug.log*
yarn-error.log*# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln

最后需要强调的一点是,如果你不慎在创建.gitignore文件之前就push了项目,那么即使你在.gitignore文件中写入新的过滤规则,这些规则也不会起作用,Git仍然会对所有文件进行版本管理。
简单来说,出现这种问题的原因就是Git已经开始管理这些文件了,所以你无法再通过过滤规则过滤它们。因此一定要养成在项目开始就创建.gitignore文件的习惯,否则一旦push,处理起来会非常麻烦。

五、github上 watch star fork的作用

  • star 的作用是收藏,目的是方便以后查找。
  • watch 的作用是关注,目的是等作者更新的时候,你可以收到通知。
  • fork 的作用是参与,目的是你增加新的内容,然后 Pull Request,把你的修改和主仓库原来的内容合并。

转载于:https://blog.51cto.com/9161018/2317628

git与github相关推荐

  1. Git与github基本操作

    一.  git安装与简单配置 1.      git的安装 首先进入git的官方网站git-scm.com 下载自己电脑对应的git版本,然后点击安装即可 点击上图的红色部分进行下载 安装的时候直接默 ...

  2. 用 Git 和 Github 提高效率的 10 个技巧!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:segmentfault.com/a/11900000038 ...

  3. 在Pycharm工具中配置集成Git和GitHub

    在Pycharm工具中配置集成Git和GitHub 1.集成Git. 打开Pycharm,  点击File-->Settins-->Version Control-->Git 然后在 ...

  4. R,Git和Github(下)

    作者:Wenhu 博客:http://bioinfostar.com/ 本讲第一部分,介绍git的"足够你用"命令:本讲为第二部分,介绍github的主要用途,包括版本管理.分枝管 ...

  5. clone git 修改保存路径_Git和Github详细入门教程(别再跟我说你不会Git和Github)

    前言:成功不是将来才有的,而是从决定去做的那一刻起,持续累积而成.你好,我是梦阳辰,快和我一起搞定Git和Github吧. 文章目录 01.Git概述 02.Git的本地仓库操作 Git的版本回退操作 ...

  6. 关于Git和Github你不知道的十件事

    Git 和 GitHub都是非常强大的工具.即使你已经使用他们很长时间,你也很有可能不知道每个细节.我整理了Git和GitHub可能提高日常效率的10个常用技巧. GitHub 快捷键: t 和 w ...

  7. Windows 下使用Git管理Github项目

    Git Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理.最初由Linus Torvalds编写,用作Linux内核代码的管理.在推出后,Git在其它项目中也取得 ...

  8. 用Git向gitHub上传项目

    用Git向gitHub上传项目 1.安装git 2.在git安装目录下,运行git-bash.exe  如图所示 3.在git中绑定你注册gitHub是的用户名.邮箱. $ git config -- ...

  9. git和github的关系

    写在前面:我身边好多人问我git和github的区别,想必对于好多人没学过的大佬们恐怕也是一脸懵逼,但是不知道也是不行的,所以我今天就来讲一讲这二者的区别和联系. 用一句话形容这二者的关系:git是弓 ...

  10. git push github SSL报错处理

    本文仅供学习交流使用,如侵立删!demo下载见文末 git push github SSL报错 问题:OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connect ...

最新文章

  1. Ubuntu16.04下安装sogou输入法
  2. 机器学习:SVM多分类,SVM回归(SVR)
  3. php5.3连接sqlserver2005
  4. java thread 多线程_java用Thread方式创建多线程
  5. 为什么要在JavaScript中使用静态类型? 我们是否应该使用它们?
  6. [Coci2015]Divljak
  7. 两万字《Java完全自学手册》15张导图,送给所有的零基础小白(建议收藏)
  8. c#编写闭合导线简易平差程序
  9. 小程序容器化:基于uni-app的Android小程序开发
  10. 2020年最全易语言安装与配置使用教程
  11. 管理信息系统(MIS)期末复习参考指南
  12. (微信小程序)页面导航
  13. linux下使用SP_Flash_tool刷机
  14. 外包项目注意事项问题
  15. [渝粤教育] 东北大学 现代科学运算—MATLAB语言与应用 参考 资料
  16. 哪些城市有PMP考试考点?PMP考试考场都在哪?
  17. 基于tensorflow的ResNet50V2网络识别动物
  18. 全球与中国智能精准医疗软件市场深度研究分析报告
  19. [量化学院]使用cvxopt包实现马科维茨投资组合优化:以一个股票策略为例
  20. UVa Online Judge的重建

热门文章

  1. 完结之frame和bounds的区别
  2. Java枚举类型与泛型
  3. 百度和亚马逊拍了“同一支”宣传片
  4. StackOverFlow 最有影响力的IT书箱 [Share]
  5. python簇状柱形图_Python:matplotlib 和 Seaborn 之簇状柱形图、分面 (三十五)
  6. 基于web的图书管理系统_基于RFID的图书馆资产管理系统--RFID资产管理--新导智能...
  7. 关于CORS跨域问题的理解
  8. 计算机程序设计员理论二
  9. 用于可靠的钙钛矿薄膜瞬时光致发光模拟的拟合程序
  10. 2017美国数学建模MCM B题(离散型)翻译 收费后合并 (Merge After Toll)