Git和Github入门实践

本篇文章来源于实验楼Git和Github入门实践教程,根据自己的总结,写下来这篇文章。

实验楼地址:https://www.shiyanlou.com/


一、克隆 GitHub 上的仓库到本地

现在克隆前面我们在 GitHub 上创建的仓库,使用git clone + [仓库地址]命令即可,这是标准的克隆仓库命令。

点击下图绿色按钮,再点击紫色框中的按钮即可复制仓库地址,当然复制上面地址栏中的内容也是一样的。

克隆仓库到本地:

进入仓库主目录,如下图所示,仓库主目录中有个.git隐藏目录,它里面包含了仓库的全部信息,删掉这个目录,仓库就变成普通的目录了。进入到仓库目录中,命令行前缀发生了一些变化,出现了红色的 master ,它就是当前所在的分支名:

当我们在 GitHub 上创建一个仓库时,同时生成了仓库的默认主机名 origin,并创建了默认分支 master。GitHub 可以看成是免费的 Git 服务器,在 GitHub 上创建仓库,会自动生成一个仓库地址,主机就是指代这个仓库,主机名就等于这个仓库地址。克隆一个 GitHub 仓库(也叫远程仓库)到本地,本地仓库则会自动关联到这个远程仓库,执行git remote -v命令可以查看本地仓库所关联的远程仓库信息:

Git 要求对本地仓库关联的每个远程主机都必须指定一个主机名(默认为 origin),用于本地仓库识别自己关联的主机,git remote命令就用于管理本地仓库所关联的主机,一个本地仓库可以关联任意多个主机(即远程仓库)。

克隆远程仓库到本地时,还可以使用-o选项修改主机名,在地址后面加上一个字段作为本地仓库的主目录名,举例如下:

另一个在其它 Git 教程中常见的命令git init,它会把当前所在目录变成一个本地仓库,因为有 GitHub 的存在,这个命令在我们的生产生活中用到的次数应该是零,除非你想费时费力自己搭建服务器。操作截图如下:

二、一次完整的修改、提交、推送操作

首先,进入仓库主目录,执行git status查看整个仓库的状态:

2.1 对工作区进行修改

创建一个文件并再次查看仓库状态,这步操作是在工作区中:

如上图所示,新建文件后,命令行前缀又发生了一些微小的变化,红色 master 后面出现了*星号,这表示工作区或暂存区有变化,对文件进行增删改操作都会出现这个星号,另外使用git status命令亦可查看详情。

2.2 添加修改到暂存区以及撤销修改

按照上图的提示,使用git add [文件名]命令跟踪此新建文件,即把新增文件添加到暂存区,以备提交:

如果对多个文件或目录进行了增删改,可以使用git add .命令全部添加到暂存区。

注意这里有个概念,当我们修改了工作区,git add命令是将这些修改添加到暂存区,暂存区记录的只是修改。如果要撤销暂存区的修改怎么办?根据上图的提示,执行git reset -- [文件名]或者git rm --cached [文件名]命令即可:

上图的命令,如果省略最后的文件名,把命令写成git reset --即可把暂存区的全部修改撤销。好,现在暂存区的修改被撤销,又回到了工作区。

现在介绍另一个命令git diff,它可以用来查看工作区被跟踪的文件的修改详情,此时新建文件 one.txt 并未被跟踪,而已被跟踪的文件 README.md 无修改,所以看不到。注意,只有在版本区中存在的文件才是被跟踪文件。

我们先修改 README.md 文件,然后执行此命令:

此时会跳到新的页面,即工作区修改详情页,按Q退出此页面:

现在,将工作区的两处修改(新增文件 one.txt,修改文件 README.md)全部添加到暂存区,并使用git diff --cached查看暂存区的全部修改:

同样,此命令也会跳到新的页面,即暂存区修改详情页:

2.3 查看提交历史

接下来,将执行git commit命令把暂存区的修改提交到版本区,生成一个新的版本。

在此之前,先介绍另一个命令git log,它用来查看版本区的提交历史记录,当前只有一个提交,就是在 GitHub 上创建新仓库时的初始化提交。同样此命令也会跳到新页面,如下图所示:

关于查看提交历史记录的命令,有些常用的选项介绍一下:

git log [分支名]查看某分支的提交历史,不写分支名查看当前所在分支

git log --oneline一行显示提交历史

git log -n其中 n 是数字,查看最近 n 个提交

git log --author [贡献者名字]查看指定贡献者的提交记录

git log --graph图示法显示提交历史

2.4 配置个人信息

接下来需要对 Git 进行一些本地配置:

user.email:写入你自己注册 GitHub 账号的邮箱

user.name:你自己的 GitHub 账号名字

这两个命令设置你的身份信息如下图。git config -l可以查看配置信息(就不展示截图了):

完成后,系统自动生成 Git 的配置文件,就是家目录中的隐藏文件.gitconfig:

上图所示的配置文件也是可以直接手动修改。

2.5 提交暂存区的修改

现在执行git commit命令生成一个新的提交,一个必须的选项-m用来提供该提交的备注:

提交后,暂存区的修改被清空,执行git log查看提交记录,紫色框中的十六进制序列号就是提交版本号,这是很重要的信息,每个提交都有自己单独的版本号,就像公民身份证号一样:

观察上图的提交信息,提交版本是按时间倒序排列的,也就是最近的提交排在最上面,你可能需要查看时间正序排列的信息,那么可以使用git log --reverse命令。

现在介绍一个超级实用、使用频率极高但几乎所有 Git 教程都不重视的命令git branch -avv,它用来查看全部分支信息:

上图有三行信息,依次说明:

第一行,开头的星号表示当前所在分支,绿色的 master 是分支名,之所以是绿色,也是因为它是当前所在分支。后面第二项是版本号,第三项中括号里面蓝色的字,表示此分支跟踪的远程分支的名字,当然啦,这也是克隆远程仓库到本地时的默认设置 -- 创建 master 分支并自动跟踪远程同名分支;冒号后面黑色文字表示本地分支领先其跟踪的远程分支一个提交。最后一项是提交时填写的备注信息。

第二行,是 Git 指针信息,它指向远程仓库的 master 分支,这行信息暂不重要。

第三行,远程分支信息,详见第一行的解释。

在执行commit命令时,再介绍一个我并不推荐的选项-a,它的作用是将未添加到暂存区的修改,也就是工作区的修改也一并提交,但会略过未被跟踪的文件,比如新建文件 one.txt,此命令的完整格式:git commit -am xxxxx。谨慎的做法是按照前文的顺序,修改工作区 - 提交到暂存区 - 随时使用git status查看仓库状态 - 将暂存区的修改提交到版本区生成一次新的提交。

最后一个环节,将本地新增的提交推送到 GitHub 远程仓库中,命令是git push,后面不需要任何选项和参数,此命令会把本地仓库 master 分支上的新增提交推送到远程仓库的同名分支上,因为当前所在的分支就是 master,而且上文提到,它已经跟踪了远程仓库的同名分支:

此命令需要再次输入用户名和密码,密码为隐藏数据,输入时看不到。推送成功后执行git branch -avv查看分支情况:

如上图所示,本地分支 master 与远程分支 origin/master 的版本号一致,通常看两个版本号是否一致,只需比对前四位。看一下网页上的情况:

完全符合预期。

一个小细节,在上图右侧有 “14 hours ago” 字样,因为这次提交操作是 14 小时前完成的,提交后我睡了一觉,与推送操作的时间无关。

以上就是一次完整的修改 - 提交 - 推送操作。一次推送中可以包含多个git commit操作,也就是多个提交可以一起推送。

三、版本回退

如果发现 one.txt 文件内容有误,怎么做?可以修改此文件然后再次添加到暂存区、提交、推送,也可以撤销最近一次提交,修改文件后重新提交推送。现在使用后一种方法来演示撤销提交的操作流程。

首先执行git reset --soft HEAD^撤销最近的一次提交,将修改还原到暂存区。--soft表示软退回,对应的还有--hard硬退回,后面会讲到,HEAD^表示撤销一次提交,HEAD^^表示撤销两次提交,撤销 n 次可以简写为HEAD~n。软退回一个提交后执行git branch -avv命令查看分支信息:

可以看到本地仓库的 master 分支的版本号已经发生了变化,变成了前一次提交的版本号,中括号里也有提示信息,本地分支 master 落后其跟踪的远程分支 origin/master 一个提交。

执行git status查看仓库状态,果然上一个提交中的修改全部扔回了暂存区:

再次修改 one.txt 文件,执行git add .命令将新的修改添加到暂存区,然后执行git commit命令生成新的提交:

四、处理 commit 时间线分叉

执行git status和git branch -avv查看仓库状态和分支状态:

可以看到本地仓库的 master 分支与远程仓库的 origin/master 分支在提交版本上有了冲突,又叫做提交时间线分叉。因为刚才的提交操作不是基于远程仓库 origin/master 分支的最新提交版本,而是撤回了一个版本。这种情况下也是可以将本地 master 分支推送到远程仓库的,需要加一个选项-f,它是--force的简写,这就是强制推送:

执行git branch -avv看一下分支信息,本地 master 与远程 master 的版本号一致,前四位都是 e290,在浏览器上刷新 GitHub 页面,结果如预期:

五、本地仓库 commit 变化记录

假设此时发现情况不对,之前的那次版本号为 5c04 的提交是正确的,刚才的版本回退操作全都是误操作,怎么办?再次执行一次版本回退吗?当然不需要啦,我们有git reflog命令,它会记录本地仓库所有分支的每一次版本变化。实际上只要本地仓库不被删除,随你怎么折腾,都能回退到任何地方。reflog记录只存在于本地仓库中,本地仓库删除后,记录消失。执行此命令如下图所示:

怎么回退到 5c04 那个版本呢?可以直接执行命令git reset --hard [版本号],如果记不清版本号,也可以根据上图第 3 行的信息,执行git reset --hard HEAD@{2}命令,其中HEAD@{2}就是上图第 3 行第 2 列所示,这个命令的意思是回到当前分支最近两次提交版本变化前:

还想反悔,刚才还是改对了,怎么办?再执行一次即可,这次大括号里就是 1 了:

重要的一点,本节全部命令中,只有push是需要联网执行的,它对远程仓库进行了修改。

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