给想学Git的你的一个简单的Git入门教程

Git的重要性不言而喻,而让一个新手快速上手Git,并把自己的代码提交到GitHub是一个比较困难的事情——毕竟网上很多教程上来就讲仓库、分支这些概念。于是,凭借着自己对Git的一知半解,我写了这篇教程。
此教程适合没有任何基础的人阅读。如果发现有错误,欢迎指正。

前言

开始这篇教程的学习之前,我默认你已经掌握了命令行(终端)的基本使用,也就是怎么打开终端,怎么执行命令(其实就是把命令输入进去再回车),怎么在终端里切换目录(cd命令)。如果大家以前没用过终端,可以搜一下PowerShell(Windows用户)或者Linux命令(Linux/macOS用户)的教程,简单学一学。

Git是什么?

用官方的话来讲,“Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。”

当然,我们现在肯定还不知道“版本控制”是什么,那我们就不看这些“天书”,用通俗一点的话来讲一下我理解的Git——在我心里,Git其实就是一个用来管理代码的工具,可以给你的代码区分版本、让别人也参与到你的开发中去,还可以借助GitHub等“代码托管平台”来保存和分享你的代码。

不知道大家有没有遇到过用不止一台设备进行开发,或者与其他人一起做一个项目的事情——在两台设备之间同步代码,或者与别人同步你的代码,是非常痛苦的。不仅要保证两台设备上的代码一致,还要保证代码不丢失,整合两台设备上的代码就更痛苦了。而使用了Git之后,这些问题就将不再是问题。

Git的安装

不同操作系统安装Git的方法是不一样的,根据我的经验,我稍微总结了一下常见的操作系统的安装方式:

Windows

去官网https://git-scm.com/下载安装包,然后安装。安装的具体过程可以查看“视频教程推荐”里的Git教程。

在Windows上安装Git我认为是最复杂的,配置极其的多。。。不过大家跟着视频教程走一遍应该就没有什么问题了。

macOS

安装Xcode,它已经自带了Git。如果装上了Xcode还是没有Git的话,可以在终端输入“git”,会提醒你下载“Xcode Commandline Tool”,下载安装好就可以用Git了。App Store里也有Git这个应用。

如果你安装了brew这个包管理器,那直接使用brew安装也可以。

Linux

不同的Linux由于包管理器不一样,安装的方法也不大相同。我用过Debian系和Arch系的一些发行版和OpenSUSE,它们安装Git的方法如下:

Deepin、Ubuntu、Linux Mint、Debian等Debian系Linux:

sudo aptitude install git # 或者 sudo apt-get install git

Manjaro、Arch Linux、Arco Linux等Arch系Linux:

sudo pacman -s git

OpenSUSE:

sudo zypper in git

RedHat系我没有用过,有用过的欢迎补充。

当然,如果你不走寻常路,也可以去官网下载Git的源码,用源码make,make install安装。

安装好之后,终端输入git --version命令,如果显示出了Git的版本号,就说明安装成功了。

另外,Windows系统还可以通过在桌面按右键,如果出现“Git Bash here”和“Git gui here”就说明安装成功了。

GitHub的使用

提到Git,肯定就离不开GitHub这个世界最大同性交友网站代码托管平台。那什么是代码托管呢?通俗一点讲,就像你把文件存储到百度网盘、iCloud、坚果云一样,只不过使用GitHub是把你的代码存储到GitHub而已。

我们先注册一个GitHub账号,非常简单,网上教程也有很多,这里就不细讲了。

登录之后进入github.com,大概是这么一个界面(不知道为啥我头像没显示出来):

最左边一栏是你的仓库,什么是仓库我们后面会提到,刚注册的话那里应该是空的。

这时候我们需要进行一个设置。打开终端,输入以下两行命令:

git config --global git config --global user.name "你的用户名" git config --global user.email "你注册github使用的邮箱"

把你自己的信息写入到本地Git的配置离去。

我们点击这个new按钮,新建一个仓库:

然后我们就能看到这样一个界面了,Owner应该是你们自己:

这里Repository Name是仓库名称,可以随便写,但是最好别用中文。Description是仓库的描述,也可以随便写,这个用什么语言就都没有什么太大的关系了。Public和Private是仓库是公开的还是私有的,我们一般都选择公开的,这样比较方便和别人分享你的代码,当然你愿意的话选Private也没有什么问题。下面那一栏我们暂时不用管。

都填好之后大概是这样:

点击Create Repository,就可以把仓库建立好了。建立好之后会跳转到这样一个页面:

先不要关掉它,我们待会会用到这个页面里的一些东西。

如何将你的代码托管到GitHub

视频教程一般都会讲很多概念性的东西,但是我们在这里先不闲扯那些概念了,我们直接进入使用。

为什么要用命令而不是图形界面呢?我觉得命令比图形界面好理解多了,而且就那么几个命令,翻来覆去地用几遍也就都记住了。此外,咱们作为后端开发者,免不了跟命令打交道,以后部署项目的时候,绝大多数Linux服务器可是没有图形界面的哦,你只能用命令完成你的操作,所以大家不要怕使用命令行,用熟练了以后你就发现:有时候用命令比用图形界面方便多了!

(让我对Windows系统产生极大的厌恶,宁肯什么软件都用Wine移植也不用Windows的原因就是Windows系统的命令行实在是太辣鸡了,居然不能用mysqldump,语法还极其的啰嗦、不必要的复杂,用起来真的让人火大,还是Linux和Unix的命令行舒服啊)

macOS/Linux用户:

打开终端,cd到你代码存放的目录,别照抄我的命令哈(无视我图上的git:master吧):

Windows用户:

进入你代码的目录,右键Git Bash Here,在弹出的黑窗口中进行我们接下来的步骤。或者你也可以随便找个地方Git Bash Here再cd过去。

然后输入:

git init

这时候你应该可以看到类似于这样的输出:

Initialized empty Git repository in xxxxx/.git/

Windows用户可以发现文件夹下多个了.git文件夹。

这样当前目录就是一个Git仓库了,目前它是空的。

那我们怎么把这个仓库和GitHub上我们刚刚建好的仓库建立起关联呢?也很简单,我们可以发现在刚才建立仓库的页面中有这样两条命令(你们的和我的肯定不一样):

目前我们只需要用到第一条,就是git remote xxxx那条。

我们把那条命令复制下来,粘贴在命令行里执行一下。这条命令没有任何输出——毕竟“没有消息就是最好的消息”嘛。

这样,我们建好的仓库就和GitHub上的仓库建立起了联系。接下来我们就可以把自己的代码提交上去了。

但是有时候,我们不需要把所有的文件都提交到GitHub,比如Java编译形成的.class文件和target文件夹,以及idea的.idea文件夹。这时候我们需要一个东西来帮我们自动排除掉这些不需要的文件,这就是.gitignore文件。

我们用以下命令来创建它:

touch .gitignore

把它打开,将你要忽略的文件写进去:

然后使用

git add -A

命令把你所有的文件添加到仓库里去。

当然,不用-A参数,把-A改成某一个具体的文件名也可以一个个地添加文件。

接着我们执行提交操作,使用

git commit -m "你对这次提交的描述"

来提交。-m后面的参数,也就是你对这次提交的描述可以随便写,比如“init commit”啦,“第一次提交”啦,都可以,不过在实际项目开发中我们是要写得尽可能详细的,比如这次提交我们做了什么改动,修复了什么bug之类的。

提交之后会输出对这次提交的描述信息:

可以看到,我们在.gitignore里写的文件并没有出现在列表里,它们被成功地忽略了。

接着执行

git push -u origin master

也就是我们刚才没用到的第二条命令,来把本地仓库里的文件传到GitHub。

如果你是第一次使用git,会让你输入用户名和密码,把你注册GitHub的用户名和密码输入进去就可以了。

然后会输出一大坨信息,表示我们提交成功了:

再回到GitHub,我们可以发现文件都上传到了我们的仓库里去:

太棒了!我们已经成功地把自己的代码托管到了GitHub!😄✌️

如果要在另一台设备上修改,你只需要在另一台设备上执行

git clone xxxxx  #这个xxxxx是点开“Clone or download”之后里面那个链接

就可以把代码下载到本地了。

改完之后,继续执行

git add -A git commit -m "xxxxxx" git push        #这样写是没问题的——你目前可以理解为,除了第一次push需要 -u ,其他的都不需要了

就可以把你的修改也提交上去了。

如果要在原来的设备继续修改,只需要执行

git pull

就可以把修改好的代码拉取下来,继续修改了,之后的提交同上。

什么是仓库

现在我们来回答前面提到的这个问题。相信这个问题现在应该难不倒大家了吧——仓库(Repository)其实就是一个目录,这个目录里面所有的东西都是被Git管理着的。这个东西还有另外一个译名,叫“版本库”,我觉得这个名字更合适。

什么是分支

可能有的同学注意到我们刚刚执行的命令里有一个词出现了好几次——“master“。其实这个master就是一个分支(Branch)。

那分支是什么呢?其实可以理解为一个代码的不同版本,有一点点像平行宇宙的概念。

分支是可以合并的,就像平行宇宙发生了交汇——在这个宇宙里用Java做开发的我和平行宇宙里用C#做开发的我相遇了!(当然这只是开个玩笑哈)

目前我们只接触到了Master分支,其实实际开发中还会遇到很多分支——比如Develop,Bug之类的分支,有些项目中每个开发者还会有自己的分支(比如我做的一个项目里我就有一个Wen分支)。但是无论有多少个分支,Master分支都是最主要的,出现在Master分支里的代码,一般都是测试通过了的、没有Bug、可以在生产环境中运行的代码。当然我们现在还是在学习中,就不用在意这些细节啦,直接往Master分支上推就行。

Git常用命令

这里总结了使用Git时常用的命令,供大家参考:

git init                                        # 创建一个新本地仓库 
git add xxx                                # 将xxx文件添加到本地仓库 
git add -A                                  # 将当前目录及其子目录下所有文件添加到本地仓库 
git commit -m "xxx"                   # 创建一次提交,提交说明为xxx 
git remote add origin xxx          # 把xxx设置为当前本地仓库的远程仓库,名为origin 
git push xxx ***                         # 把提交推到远程仓库xxx的***分支,什么都不写(只写git push)的话默认origin仓库你当前的分支 
git pull                                        # 从远程仓库里拉取代码 
git clone xxxx                          # 把远程地址为xxxx的仓库克隆到本地 
git branch xxx                          # 创建一个叫xxx的新分支 
git checkout xxx                        # 切换到xxx分支 
git status                                  # 列出当前仓库状态 
git log                                     # 列出提交日志

目前大家肯定用不到这么多,重点掌握我们前面写到的就可以了。

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

推荐阅读更多精彩内容

  • 还是老规矩,这篇看完后,还是学不会git版本控制的,你来砍我 是兄弟就来砍我吧!!! Git是分布式版本控制系统,...
    Zteen阅读 3,044评论 0 6
  • 这篇博文是自己在学习git过程中的思考总结。本文仅仅代表个人的看法,如有不妥地方还请本文文末留言。 😊 原文链接g...
    Ming_Hu阅读 981评论 4 18
  • 创建版本库 什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所...
    景岳阅读 709评论 0 3
  • 培训期接近了尾声,我们也迎来了最后一位高管面对面,中洲董事长姚日波姚董。 国际惯例自我介绍免不了,不过今天不用于以...
    可爱的_414d阅读 239评论 0 3
  • 意犹未尽 绘画创作就是按照惯性,不知不觉就深挖一个题材。看了很多国画技法视频,觉得剪子的笔法能把黑、红色把肌理表现...
    漫悟阅读 159评论 0 3