2020-08-10

准备工作

版本管理软件

作用

记录代码的版本

实现多人协作

分类

集中式,典型代表 SVN

分布式,典型代表 Git

注册远程仓库账号

远程仓库相当于中央服务器

我们需要在github上或码云上注册一个账号,用于创建远程仓库使用

注册的时候,要使用一个邮箱,所以我们必须有一个邮箱。

如果涉及到邮箱验证,不要使用手机邮箱,应该使用浏览器邮箱。

初次使用Git管理项目

Git软件在工作的时候,需要知道你是谁?所以需要设置一个用户名和邮箱。

这个用户名和邮箱,最好使用你的github账号或码云账号,当然随便填也可以。

具体做法:

任何文件夹,空白处,右键 --> Git Bash Here

依次执行下面两行代码

# --global 会将配置项保存到用户配置

$ gitconfig--globaluser.name"xxx"

$ gitconfig--globaluser.email"xxx"

$ 不是命令命令的一部分,你只需要从 “git config ....” 这里开始复制(或抄写)

Git初始化

目的是学习,所以,随便创建一个项目文件夹,里面随便创建几个文件,打开项目文件夹

一定要在项目文件夹中,右键-->Git Bash Here。

执行下面的命令:

# 初始化,表示使用Git管理我们的项目。这个命令只需要执行一次(注意空格)

gitinit

对于一个项目来说,git init 只需要执行一次

执行 git init 命令之后,会在项目文件夹中生成一个隐藏的 .git 文件夹

Git 管理项目的每一次记录,都在 .git 文件夹里面保存着。

你的计算机中,可以有多个项目,而且都可以使用Git来管理,不会冲突

如果你的项目需要使用git管理,则必须在项目文件夹中初始化

mac查看隐藏文件 shift+command+.

初体验

初始化之后,就可以使用Git来管理你的项目了。

用Git保存当前的代码

gitadd .

gitcommit-m'提交说明(此次提交了什么代码,功能是什么,类似注释)'

新增、删除或修改了代码(随便新增、删除或修改点代码),用Git保存修改后的代码

gitadd .

gitcommit-m'提交说明'

新增、删除或修改了代码(随便新增、删除或修改点代码),用Git保存修改后的代码

gitadd .

gitcommit-m'提交说明'

查看提交日志

# 查看详细日志记录

gitlog

# 查看简略版的记录

gitlog--oneline

# 查看所有的记录(适用于版本穿梭后)

gitreflog

gitreflog--oneline

切换版本,在历史版本中穿梭

# 上述查看提交日志的时候,会看到每次提交的版本号,然后执行下面的命令即可完成版本穿梭

gitcheckout 版本号

穿梭到历史的某个版本后,打开你的代码看看,是不是很神奇呢?

三个区域

下面三个区域,是Git虚拟的区域,看不到,摸不着。

工作区

工作区,指的是使用Git管理后的文件,这些文件显示在磁盘上,供我们使用或修改的区域。所以,粗略的说,项目文件夹就是工作区。

暂存区域

执行 git add .之后,文件由工作区,添加到了暂存区。 暂存区保存了下次将提交的文件列表信息。

Git 仓库区、本地仓库

执行 git commit -m '提交说明' 之后,代码会被提交到仓库区。仓库区是 Git 中最重要的部分,代码只有提交到仓库,才会形成一次历史记录,即才会形成一个版本。

工作区新建的文件和Git没有任何关系;文件被添加到暂存区,才叫做被Git管理过

记录每次更新到仓库

添加文件到暂存区

新文件,只有添加到暂存区,才叫做被Git管理。否则和Git没什么关系,即使文件在项目文件夹。

# 添加指定文件到暂存区

$ gitadd 文件名

# 以空格隔开可以一次 add 多个文件

$ gitadd [file1] [file2] ...

# 添加指定目录到暂存区,包括子目录

$ gitadd [dir] [file] [dir] [file] [file] ...

# 添加当前目录的所有文件到暂存区,包括子目录

$ gitadd .

提交文件到仓库

提交到仓库的文件,是暂存区中的文件。

# 提交暂存区到仓库区

$ gitcommit-m[message]

# 提交暂存区的指定文件到仓库区

$ gitcommit [file1] [file2] ...-m[message]

# 提交工作区和暂存区自上次commit之后的变化,直接到仓库区。

# 新文件,从未被Git管理过,是不能直接提交到仓库区的

$ gitcommit-a-m"提交日志"

撤销操作

撤销操作,只能恢复暂存区或工作区,与最近一次提交的代码一致。

# 恢复暂存区的指定文件到工作区

$ gitcheckout [file]

# 恢复暂存区的所有文件到工作区

$ gitcheckout .

# 恢复某个commit的指定文件到暂存区和工作区

$ gitcheckout [commit版本号] [file]

# 重置暂存区的指定文件,与上一次 commit 保持一致,但工作区不变

$ gitreset [file]

# 重置暂存区与工作区,与上一次commit保持一致。该命令后不能加文件或文件夹

$ gitreset--hard

前文中,git checkout 版本号 能够将代码退回到历史的任何版本,但不算是严格意义的回退,因为它叫做版本穿梭。具体见后文的分支管理。

分支管理

什么是分支

随着git提交的次数越来越多,就会形成由各个版本连接而成的一条提交线。如下图:

由Git提交而形成的提交线,称为分支。默认的分支是主分支,叫做 master,前面的学习,一直是在 master 分支上提交。

我们也可以创建其他分支,新创建的分支,相当于是原分支的一个拷贝

实际开发中

为了保证代码的安全性,不允许在主分支上进行开发

需要创建其他分支,在其他分支上进行开发,这样不会影响主分支上的代码

其他分支开发完成后,可以选择将其他分支代码合并到主分支上

创建其他分支

# 创建分支

gitbranch 分支名

# 比如

gitbranch dev

# 切换分支到dev

gitcheckout dev

# 也可以创建并直接切换分支

gitcheckout-bdev

切换分支之前,需要把当前分支的工作全部提交,否则不允许切换到其他分支。

实际开发中,鼓励多使用分支。

快进模式合并两个分支

快进模式合并

两个分支A和B

B分支包含A分支的最新版本,在合并的时候,叫做快进模式合并。

快进模式合并,相当于使用B分支的代码覆盖A分支的代码;同时版本也会更新到A分支

两个分支合并,比如把 B 分支 合并到A分支上

需要先切换到A分支

然后执行 git merge B ,表示把B分支的代码合并到A分支上。

# 切换到A分支

gitcheckout A

# 把B分支的代码合并到A分支

gitmerge B

合并模式合并两个分支

合并模式

两个分支A和B

A分支有独立的提交,B分支也有独立的提交,在合并的时候,叫做合并模式的合并。

合并模式,有可能会产生冲突;如果出现冲突,需要解决冲突,然后需要添加、提交一次,从而完成合并。

两个分支合并,比如把 B 分支 合并到A分支上

需要先切换到A分支

然后执行 git merge B ,表示把B分支的代码合并到A分支上。

如果看到 CONFLICT,则表示有冲突,需要打开有冲突的文件,手动解决冲突,然后添加、提交即可。

# 切换到A分支

gitcheckout A

# 把B分支的代码合并到A分支

gitmerge B

如果有冲突,会显示如下提示:

手动打开有冲突的文件,解决冲突,保存文件。(手动解决)

再次添加(add操作)提交(commit),即可完成合并。

其他相关命令

# 查看所有分支(本地分支)

gitbranch

# 查看所有分支(包括远程分支)

gitbranch-a

# 删除分支(需要先切换到其他分支,然后在执行删除)

gitbranch-d分支名

# 创建并直接切换分支

gitcheckout-bdev

如果要切换分支,必须把当前分支的代码全部提交到本地仓库。

穿梭到历史后,如何使用历史版本中的代码

穿梭到历史的一个版本后,根据该版本创建一个分支,比如 B 分支

在分支B中,修改需要使用的文件,然后提交(提交之后,后面的合并就会有冲突)

回到之前的分支的最后一次提交的位置(切换回原来的分支)

合并刚刚创建的新分支(B)即可

实际上就是为了练习分支。

远程仓库

说明

目前,我们的操作都是一个人开发,如果涉及到多人开发呢?大家的代码如何合并到一起呢?这个时候就需要公网上的一台服务器了,大家可以把代码提交到这台服务器上,也可以从服务器上拉取所有的代码。这个公网上的服务器就叫做远程仓库。

完全可以自己搭建一台运行Git的服务器,不过现阶段,为了学Git先搭个服务器绝对是小题大作。好在这个世界上有个叫 GitHub 的神奇的网站,从名字就可以看出,这个网站就是提供Git仓库托管服务的,所以,只要注册一个GitHub账号,就可以免费获得Git远程仓库。

实际上,除了GitHib,还有很多第三方远程仓库托管服务:

GitHub(这个网站有时很难打开)

码云(gitee)(打开速度快)

coding

Gitlab

创建远程账号

配置SSH

在本地命令行,执行下面的命令,可以生成SSH秘钥(包含一个公钥一个私钥)

ssh-keygen-trsa-C"你的邮箱地址"

# 执行完这个命令之后,后面有一些询问,我们直接一路回车即可

最后生成的秘钥在:

Windows:

C:\Users\用户名\.ssh   //  Users--用户   GaoWei--我的计算机用户名

mac:

你的用户名那个文件夹中。 按shift+Commend+.  可以显示隐藏文件,然后就可以看到 .ssh文件夹了

找到 .ssh/id_rsa.pub,用vscode打开,复制里面全部的内容,配置到远程仓库

GitHub右上角的三角号

Settings

左侧有 SSH and GPG keys

在显示的界面中,点击右上角的 New SSH key,然后完成添加公钥操作

新建远程仓库

将本地仓库中的代码推送到远程仓库

推送的是本地仓库的代码。工作区和暂存区的代码不会被推送到远程仓库

复制远程仓库的 ssh 地址

本地仓库中,执行

# 添加远程仓库地址,让我们的本地仓库和远程仓库建立关联

# origin 可以自定义

gitremote add origin 远程仓库的ssh地址

首次推送之前,需要先拉取远程仓库的代码(README.md)到本地

gitpull origin master--rebase

完成首次推送

# 如果远程没有本地的 分支,第一次推送,需要加  -u

gitpush-uorigin master

后续继续开发

# 改动了代码,先添加到暂存区

gitadd .

# 提交到本地仓库

gitcommit-m'xxxx'

# 推送到远程仓库

gitpush

注意事项

什么时候需要先拉取,然后在推送

远程仓库的提交比本地仓库的要新,或者不一样,都需要先拉取,然后在推送

如果提示 “Are you sure you want to continue connecting (yes/no/[fi....])”

输入yes,回车

克隆远程仓库到本地

实际开发中,有些时候,我们需要把别人仓库的代码克隆到本地

下载别人的代码的时候,可以选择克隆

多人合作开发的时候,需要克隆合作伙伴的代码到本地

克隆命令

gitclone 远程仓库的ssh地址

克隆别人的仓库到你的电脑中

克隆,相当于下载。可以克隆下来,但是不能向别人的仓库推送

克隆的是自己的仓库

克隆下来,也可以推送

多人协作

可以先创建远程仓库

【可选】我先把基础的代码推送到远程仓库

合作者,需要把远程仓库的代码,克隆到你的计算机中

管理员邀请合作者共同来开发

合作者,需要同意

然后,管理员和合作者,都可以向远程仓库推送代码

推送之前,必须先拉取。拉取之后,如果有冲突,解决冲突。然后推送。

如果遇到:

点击 “i”  ,按上下左右键,调整光标的位置,然后删除里面所有的内容,随便写一点也可以,但是不能太多。按esc,退出编辑模式,继续按 “:wq” ,表示保存,并退出的意思。

后续,可以push。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,198评论 6 514
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,334评论 3 398
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,643评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,495评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,502评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,156评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,743评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,659评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,200评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,282评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,424评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,107评论 5 349
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,789评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,264评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,390评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,798评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,435评论 2 359