继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

git与github

holdtom
关注TA
已关注
手记 1845
粉丝 240
获赞 991


1、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 等等。

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

3、git的入门命令,使用Git Bash操作命令行

(1)、git init:初始化本地仓库;,通过git init命令把这个目录变成Git可以管理的仓库

通过这个命令,可以创建一个本地.git仓库,.git文件(默认是隐藏文件)

.开头的文件是隐藏文件,所以需要设置让其出现

touch a.txt //创建a.txt文件

echo.>b.txt //创建b.txt文件

git status:查看当前仓库所在目录的文件状态

git与github

on branch master:在哪个分支上

no commits yet:还没有提交过

untracked files:当前的这个文件是没有被追踪的,git当它是不存在的,通过命令:

(2)、git add a.txt:来将这个文件提交给git,告诉仓库,这是我需要你管理的东西。add是添加文件下所有的文件

通过这样的方式,我们可以把文件/文件夹托管给git

git与github

(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与github

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

git与github

然后按下esc退出编辑插入模式 => 按下ZZ(大写)保存退出。

(4)、git log:查看已经提交的文件信息,所有批次的提交信息

通过git log 哈希值:可以只查看某一次的提交信息

以上操作都是操作本地仓库,untracked files不用管它

每次操作:

首先git status,查看文件状态,看看哪些文件修改了

然后git add,将修改文件提交到暂存区,

git add . 将本地仓库全部文件提交到暂存区

然后 git cimmit -m 描述文字,提交到本地仓库

以上操作步骤,缺一不可。

不过可以简写命令行:git commit -am '描述文字'(只有在文件是已经暂存的情况下才可以使用简写命令操作,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 diff:查看文件修改了哪些地方 

只在文件已经被修改,但是还未add的情况下,可以查看,如果已经add就不可以查看修改的情况了

(8)、git reset:返回文件到之前的版本

git reset --hard HEAD^ //返回上一个版本

git reset --hard HEAD^^ //返回上上一个版本

git reset --hard HEAD~·100 //返回往上100个版本

回退到未来的版本

git reset --hard d93ccfb4a9f6a5971c4a2481f927202a4cf66d49 //对应版本的哈希值

(9)、git reflog用来记录你的每一次命令,找到对应修改的commit id

穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。

要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

(10)、创建SSH Key

C:\Users\xiaoxiao.ssh 这就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

(11)、push提交代码到github

git push origin master,把本地master分支的最新修改推送至GitHub。

(12)、从远程库clone到本地库

git clone git@github.com:yourname/gitskills.git

(13)、常用命令行

$ pwd :(print working directory) 查看当前所在路径--绝对路径

$ ls:(list) 查看当前目录下的内容

$ mkdir(make directory) 创建目录

$ touch 创建文件

$ cat 查看文件内容(一次性将内容全部显示)

$ q 退出

$ clear 清屏

(14)、分支管理

在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>

(15)、错误集结

(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,不用管该文件路径

(16)、笔记记录

clone和pull的区别

从字面意思也可以理解,都是往下拉代码,git clone是克隆,git pull 是拉。

clone:从远程服务器克隆一个一模一样的版本库到本地,复制的是整个版本库.(clone是将一个库复制到你的本地,是一个本地从无到有的过程)

pull:从远程服务器获取到一个branch分支的更新到本地,并更新本地库.(pull是指同步一个在你本地有版本的库,远程库内容更新的部分到你的本地库)

git pull相当于是从远程获取最新版本并merge(合并)到本地 git pull = git fetch + git merge,git fetch更安全一些

        git clone是远程操作的第一步,通常是从远程主机克隆一个版本库,eg:$ git clone ##   该命令会在本地主机生成一个目录,与远程主机的版本库同名,如果要是制定不同的目录名,可以将目录名作为git clone 命令的第二个参数。 eg:$ git clone #版本库网址# #本地目录名#   

        git pull 作用是,取回远程主机某个分支的更新,再与本地的指定分支合并。它的完整格式稍稍有点复杂。

        eg:$ git pull ##远程主机(origin) #远程分之(next)#:#本地分之(master)#

        如果远程分支是与当前分支合并,则冒号后面的部分可以省略。

        eg:$ git pull #远程主机(origin)#  #远程分之(next)# 相当于

        1. $ git fetch origin  

        2.$git merge origin/next 

        在某些场合,git会自动在本地和远程分之之间,建立一种追踪关系。

        比如,在git clone 的时候,所有本地分之默认与远程主机的同名分之,建立追踪关系,也就是,本地的master分之自动“追踪”origin/master分之。

        git 建立追踪, git branch --set-upstream-to=origin/next master --->指定master分之追踪到origin/next。

$ git pull 表示当前分支自动与唯一一个追踪分之进行合并。

©著作权归作者所有:来自51CTO博客作者xxxpjgl的原创作品,如需转载,请注明出处,否则将追究法律责任

g


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP