一、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.txt
2.然后再使用git命令创建这个文件,命令为:$ touch readme.txt
3.$ git add readme.txt,不用管该文件路径
**17、提交对象**
18、创建分支
git branch:查看当前所在的分支
git branch branch2:创建分支branch2
git checkout branch2:切换分支到branch2
git checkout -b branch2:合并操作,开分支并且切换到新分支
四、上传文件到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的作用