新人入职 git 命令行使用指南

前言

话不多说,直奔主题。

git的主要作用,在于多人协作,这种协作的根本需求来源于早期程序员如何同步进度、合并代码、回溯版本、追踪bug。在这种生产需求下,其实产生了很多类型的代码管理工具。git能脱颖而出,自然是有他的优势。这其中,就是所谓大家耳熟能详的“分布式”。分布式其实就是指一份代码多端使用,多端存储。既可以是放在本地电脑,也可以存放在远程的某个服务器上。

在这里,必须提醒新人们注意,脑袋里要形成对git的最本质的认识。所谓git,是一个代码的版本管理工具,也就是历史记录工具。你每做一步阶段性的生产(比如新写一个组件、功能),就新建一个历史记录的时间线,在这条历史记录线上去写代码,把自己的所有修改都记录在这上面。git会记录你的每次修改,然后当你哪次不小心做了错误的修改或者寻找bug,你可以回退到相应的版本记录上。这些历史记录形成了一条条的记录线,可以合并在一起,形成一条完整的历史记录。

要使用git,就必须下载git软件,你可以直接搜索git官网进行下载。在这里不再赘述这些东西,你可以随便搜索一遍下载教程。安装过程中不要随便勾选什么选项,一路点击下一步就好。

git的结构

git在结构上分为本地仓库、暂存区和远程仓库。

本地仓库

所谓本地仓库,就是在你进行生产的电脑上的仓库,这个仓库你可以自己新建,也可以从远程仓库下载(一般是使用clone,后面会说)。当你下载了git并安装后,你会发现当你在电脑上右击时会显示出两个git相关的选项,其中有一个是“git bash here”,这将是我们后面的主角,也就是git命令行工具。

暂存区

所谓暂存区,是一个接收代码版本文件、修改记录的地方,如果你要将 !你的本地的代码版本提交到远程仓库!,就必须经过暂存区!你可以这样看待这三者的关系:本地仓库 - 暂存区 - 远程仓库。暂存区是一个中间代理人。

远程仓库

所谓远程仓库就是存放在服务器上的代码版本库,有很多存放代码的远程仓库网站,比如github,gitee。如果你要将本地仓库的代码推送到远程仓库,就必须在相关网站注册账号,然后新建仓库。如何新建远程仓库呢?

  1. 你可以先登录gitee网站去注册一个账号,点击里面的新建仓库
  2. 给仓库起个名字,尽量语义化
  3. 不要选择任何所谓开源协议
  4. 你可以选择公开或者私有,这取决于你

然后,你就新建了一个远程仓库,这时你就来到了一个新页面,上面有你的仓库地址、一些简单的命令行教程,还有很多奇奇怪怪的按钮,先别管那些,让我们接着往下来。

git命令初见面

1. git clone url

为了你能够快速掌握,希望你进行一些实战,一步一步来。git其实很简单,但简单的东西建立在实操的基础上。

还记得之前新建的远程仓库吗?点击上面的新建文件按钮,你可以新建一个名为“demo.txt”的文件。然后点开它,在上面打上第一行字:第一行测试文字。

然后,在你的电脑上任意你能找到的位置新建一个文件夹,并起个好听的名字。点开它,右击并选择“git bash here”,这时会弹出一个命令行。在上面使用我们要学的第一个命令:git clone <url> <repo>。

这里的url,是你的仓库地址,可以在仓库页面的右边看到。repo是仓库的英文缩写,也就是你的远程仓库名,不过一般可以省略。clone的意思是将你远程仓库的代码克隆到本地。切记,不要直接下载zip文件,这种方式不建议作为学习者的选择,你要做的就是敲命令行。

踩坑提醒:
一定要注意右击时所在文件夹的层级,不同的文件夹层级右击打开git bash here的效果是不一样的,当你想知道git bash here成功没有,可以看看命令行工具的右边有没有一个括号,里面显示分支名,一开始是master。这个没法在这里细说,读者可以自行点击试试,没有什么太大的问题,但是是新人很容易犯的错误。

2. git add fileName

还记得之前说的暂存区吗?这个命令的意思是说将我们做了修改的文件添加进暂存区。为什么要添加进暂存区?因为只有添加进暂存区的文件才能被推送到远程仓库。在这里,有两个git add的便捷命令,一个是 git add .,注意这个点号,这个命令意为将所有当前目录下的文件添加进暂存区。git add --all,这个命令意为将所有文件都添加进暂存区。

3. git commit -m "修改的说明"

这个命令用于说明你此次更改做了些什么,比如结构调整、样式调整、新增功能、修复bug等。每次推送代码到远程仓库之前,都要使用git add和git commit命令,否则推送(push)是不会成功的。

4. git push url branch

一般情况,你的代码在远程新建时只有master分支,这个分支顾名思义就是管理者分支,一般不会在上面进行开发的。而且公司里的代码,master分支拥有绝对的访问权限,一般人动不了。

记住branch这个单词,这个是分支的意思。这时,打开demo.txt文件,在里面的第二行输入:第二行的测试文字。然后执行git add和git commit命令。然后使用git push url branch命令将本地仓库推送到远程仓库。这里的url是远程仓库地址,branch是分支名,默认是master。

踩坑提醒:
本地仓库分支名与远程仓库分支名不同是push不了的。

5. git branch

该命令用于检查当前存在的分支

6. git branch 分支名

该命令用于新建一个分支

7. git checkout branch

该命令用于切换到目标分支

8. git checkout -d 分支名

该命令用于删除一个分支

9. git checkout -b 分支名

该命令在新建分支的同时切换到目标分支

10. git pull url 分支名

该命令形式上与push一样,但作用其实是不同的。pull意味拉,但本质不是拉代码,而是拉去远程仓库的历史记录,如果后面再跟上本地分支名,将会进行合并。

好了,至此你已经会一些基础的git命令了。但这仅仅是第一步。

合并分支

当不同的人开发完成后,或者自己在不同的分支上开发完成后,都需要对历史记录进行合并,原因在于历史记录的统一,利于巡查bug和减少分支等。分支存在太多会出现命名荒,及时删除不会有什么影响,但前提是已经合并过了。

git merge 分支名

合并分支,使用命令git merge,后面跟的分支是被合并分支。例如,我要将分支1合并到分支2,应该切换到分支1,使用命令git merge 分支2,这样,分支2就被合并到分支1了。如果是分支1合并到分支2,则要切换到分支2,再使用git merge 分支1。

例如,现在有一个分支master,自己有一个私人分支:feature-me。feature-me合并到master首先要切换到master分支,然后使用git merge feature-me。merge后面的分支是被合并分支。

还有一种合并分支的命令:git rebase,但这里不展开讲。

解决冲突

在git终端(git bash here)下打开之前clone下来的仓库。打开成功的话在文件信息后面会显示分支名。现在,我们需要新建两个分支issue1和issue2。你可以自己尝试新建一下。

新建完成后,使用命令切换到issue1分支,还记得切换命令吗?使用git checkout issue1即可。然后打开demo.txt文件,在其中的第三行录入:解决冲突issue1第三行。接着,使用git add与git commit命令对这次更改进行提交。

然后,再使用命令切换到issue2分支,打开demo.txt文件,在其中的第三行录入:解决冲突issue2第三行。接着,使用git add与git commit命令对这次更改进行提交。

接着,切换到master分支,使用git merge合并issue1,这个时候提示你合并成功。接着,合并issue2,继续使用git merge命令。但这时你会发现,界面提示你合并失败。

原因在于,要合并的两个分支,在同一行产生了修改,git没法自动解决,需要开发人员手动去解决这个冲突。打开demo.txt文件,你会发现git已经提示你冲突的位置。好,将那些无关的线条和git提示的符号删掉,既然是因为在同一行发生了修改才产生的冲突,那将这两行文字放置于不同的行不就好了吗?好,解决后可以再次尝试合并,系统显示合并成功!

好了,到这里你基本上已经入门了git,但这远远不够,公司有许多规范,你要记住的有很多。可以先做一些基本的实操,循序渐进地学习。下面是两个非常棒的git网站,建议收藏。

猴子git
阮一峰git命令清单

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

推荐阅读更多精彩内容

  • 题引: 既为了总结自己在Git使用上的实践经验,也为了给有同样Git使用需求的伙伴们提供借鉴。 本文Git使用方式...
    南国的小狼阅读 2,111评论 2 8
  • 主要是介绍git的一些概念和常用的命令行。虽然现在常用的ide要么自带git客户端,要么有git可视化插件,很方便...
    hello_小丁同学阅读 267评论 0 0
  • 文章基于Mac版本的git操作. 关于 git. 之前一直使用SVN, 开发个人项目时会使用GitHub Desk...
    KenZhangCn阅读 460评论 0 0
  • 一、用户信息 设置用户名、邮箱 $git config–-globaluser.name "xxx" $git c...
    IT一书生阅读 184评论 0 0
  • [TOC] Git @(24.1 Git)[git] 工作原理 直接记录快照,而非差异比较Git 只关心文件数据的...
    浮x尘阅读 435评论 0 0