Git&GitHub入门教程

1. Git简介

Git是和SVN一样的版本控制工具,它和SVN最大的区别是SVN是集中式的版本""控制工具,而Git是分布式版本控制工具。


集中式和分布式版本控制工具

Git是Linux之父Linus在2005年为了管理Linux代码而使用C语言开发的版本控制系统。Git的官网:https://git-scm.com/

1.1 Git安装

下载地址:| Windows | Linux/Unix |

在Windows上安装Git非常简单,全程点击"next"不需要任何思考。具体的安装步骤可以参考官方的这篇教程4 起步 - 安装 Git

1.2 代码托管中心(Git服务器)

一个团队使用Git来进行开发的时候,最好的方式是按照集中式的思想搭建一个中心的Git服务器,团队中的成员都可以从该服务器中推送和拉取代码。

对于Git服务器,既可以是我们自己搭建,也可以选择使用第三方的服务。

  • GitLab
  • GitHub(第三方的代码托管中心)
  • 码云(国产的GitHub)

1.3 Git结构


工作区:我们代码等资源所存放的目录,除了其中的.git隐藏目录。
暂存区:一般存放在"git目录"下的index文件(.git/index)中
本地库:git commit之后,暂存区的所有内容会提交到本地库。

这一块的内容可以参考:工作区和暂存区

Git跨团队合作示意图

2. Git命令行操作

2.1 初始化本地仓库

mkdir HelloGit
cd HelloGit
git init

git init命令执行之后会将当前目录初始化成本地仓库,Git自动为我们创建了唯一一个master分支,默认是往该创建好的master分支提交修改。

git init

.git隐藏目录中的内容如下所示
.git目录内容

注意,一般情况下请不要动.git隐藏目录中的内容。

2.2 设置签名

Git 全局设置:

-- 设置
git config --global user.name "codingXcong"
git config --global user.email "coding_zgc@163.com"
-- 查看
git config --global user.name
git config --global user.email

其中,--global是可选,其表示系统用户级别,去除--global则表示单个仓库级别。config配置信息保存的路径为.git/config

注意:设置用户名和邮箱主要是区分不同开发人员的身份,它和github或码云的登录信息没有任何关系。

2.3 基本操作

2.3.1 添加
-- 添加单个文件
git add [file name] --将工作区的文件添加到暂存区
-- 添加当前目录下所有的文件
git add .
2.3.2 提交
-- 提交单个文件
git commit -m "commit message" [file name] --将暂存区的内容提交到本地库
-- 提交暂存区所有的文件
git commit -m "commit message"

在执行提交之前,文件必须要先通过git add添加到暂存区。

2.3.3 删除
--从工作区中删除文件
git rm [filename]

--从暂存区中删除文件
git rm --cached [filename]

--从工作区、暂存区、本地库三个地方删除文件
git rm [filename]
git commit -m 'delete somefile'

--从暂存区、本地库中删除文件,但是工作区还存在。
git rm --cached [filename]
git commit -m 'delete somefile'
2.3.4 查看提交记录
git log

git log显示的某一条commit记录

commit后跟着的字符串表示该次提交的索引值。

--让某一条commit记录显示在一行当中
git log --oneline 

图中第一列黄色的字符串表示该次提交的局部索引值。如果提交的记录太多,可以通过以下方式来多屏控制:

  • 空格,向下翻页
  • b,向上翻页
  • q,退出

我们还可以通过git reflog实现相同的效果

git reflog
git reflog

其中HEAD@{}中的数字,表示移动到当前版本需要多少步。

2.3.5 提交记录的前进和后退
--基于提交记录的前进和后退
git reset

我们可以先通过git reflog命令获取各个提交记录,然后通过各提交记录的局部索引值实现不同提交版本之间的切换(HEAD指针的切换)。

git reflog显示各提交记录的局部索引值

git reset --hard fd01f6e   --回到初始化的时候
git reset --hard 9f825f0   --回到第二次提交的版本

git reset指令还有另外两个参数--soft--mixed,它们和--hard的区别如下:

  • --soft参数,本地代码不会发生变化
    仅仅在本地库移动HEAD指针
  • --mixed参数,本地代码不会发生变化,默认为这个参数
    在本地库移动HEAD指针
    重置暂存区
  • --hard参数,本地代码会发生变化
    在本地库移动HEAD指针
    重置暂存区
    重置工作区

请参考:git reset soft,hard,mixed之区别深解

2.3.6 状态查看
git status   --查看工作区、暂存区状态
2.3.7 比较文件差异
git diff filepath 工作区与暂存区比较

git diff HEAD filepath 工作区与HEAD ( 当前工作分支) 比较

git diff --cached filepath 暂存区与HEAD比较

git diff branchName filepath  当前分支的文件与branchName 分支的文件进行比较

git diff commitId filepath 与某一次提交进行比较
2.3.8 分支管理
--创建分支
git brach [分支名]

--查看分支
git brach -a

--切换分支
git checkout [分支名]

-- 从远程拉取分支,并在本地创建分支
git checkout -b feature/daily_20191017 origin/feature/daily_20191017

-- 合并分支
1. 切换到接收合并的分支上
git checkout [接收合并的分支名]
2.执行merge命令
git merge [将要被合并的分支名]
2.3.9 文件冲突
冲突表现

冲突解决办法:

  1. 编辑文件, 删除特殊符号
  2. 把文件修改到满意的程度, 保存退出
  3. git add [文件名 ]
  4. git commit -m "日 志信息"。注意: 此时 commit 一定不能带具体文件名

3 GitHub

我们可以将GitHub看成代码托管中心或者远程仓库。GitHub的地址:https://github.com/

3.1 申请账号

image.png

GitHub官方入门教程

3.2 创建远程仓库

创建仓库

3.3 创建远程仓库别名

git remote -v 查看当前所有远程地址别名
git remote add [别名 ] [远程地址]

3.4 推送到远程仓库

git push <远程别名> <本地分支名>
git push origin master
完整一点的push指令如下
git push <远程别名> <本地分支名>:<远程主机分支名>
省略了远程主机分支名,即表示其名称和本地分支名相同。如果不存在就创建。

3.5 克隆

git clone https://github.com/codingXcong/rpc_learn.git

git clone的执行效果:

  1. 把远程库下载到本地;
  2. 初始化本地库;
  3. 创建origin远程地址别名。
下载远程库到本地 & 初始化本地库
创建origin远程地址别名

3.6拉取

git pull origin

作用:取回远程主机某个分支的更新,再与本地的指定分支合并
格式:git pull <远程仓库地址别名> <远程分支名>:<本地分支名>
git pull = git fetch + git merge

3.7 团队成员邀请

  1. 添加协作者


    add collaborator
  2. 复制邀请链接


    赋值邀请链接

然后将复制好的链接发送给要邀请加入的人

  1. 受邀人登录github,然后访问链接


  2. 加入成功后,可以在协作者列表中看到


这里有个不解的现象,在受邀人的仓库列表中看不到加入的项目。

3.8 远程协作

  • Fork项目


    Fork
  • 将Fork后的项目Clone到本地,在本地编写好代码后再推送到远程。


    clone项目到本地

    提交到远程仓库
  • pull request


    image.png


    image.png

扩展阅读

Git官方教程
码云平台帮助文档

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

推荐阅读更多精彩内容

  • 本周学习《活法》中的两小节中所谈到的“利他”,我觉得只有一颗利他之心,其实利它也可以很简单,生活中做自己力所...
    刘学梅阅读 255评论 0 0
  • day3 啊泽 个人的成就,主要取决于福气。有福气的人,什么事都顺,没福的人,什么都不顺。所以呀,要努力的做一个有...
    方方不方呀阅读 203评论 0 0
  • “是时候结束这一切了” 莫雨菲的朋友圈动态如此写到。 我不懂这句话里有什么含义,而且她这次只配了一张图片,没有血腥...
    TY游文阅读 546评论 3 3
  • 行进在 训练有序的日子里 日复一日 不能停止 无法出列 春天来了 万物生长 说不出的 莫名感动和异样 慢下脚步 梳...
    清风2015阅读 886评论 0 3