git & github 入门指南git 是什么

git是一个版本控制(control version)系统,用于跟踪文件的变化。

版本控制是什么

你在写论文的时候,有没有像下面图里那样,新建很多个文件夹,存放不同版本的稿子,或者直接复制文件之后重命名为一个新文件,在这个新文件上继续修改,然后再复制、再粘贴,直到攒了不知道多少个历史文件。

git checkout_git checkout_git checkout

git checkout_git checkout_git checkout

以上的手动复制粘贴、改名,然后在新版上继续修改的过程,其实就是人工的版本控制。

所以,通俗点说,git 就是一个帮助你管理自己的文件从创建,到修改,再到最终定稿期间所有修改的历史的工具。这个文件可以是单个文件,比如 word 文档、excel 表格、markdown 文档,也可以是一个文件夹下的所有子文件和文件夹,比如一个项目文件夹。

通过git这个工具,你可以随时给自己的修改打一个标签,或者照一张相,当需要的时候可以重新退回这个修改点,也可以对比一下不同的修改点之间的区别。

github 是什么

想要说清楚github是什么,还得再从git说起。前面介绍到git是一个版本控制系统,其实并没有把git的特定说出来,就像电动汽车也是汽车一样。在git之前,已经有一些版本控制系统了,例如SCCS、RCS、CVS、SVN这些,它们大多是集中式的版本控制系统,而git是一种分布式版本控制系统。

关于集中式与分布式的区别,作为入门教程不适合做详细介绍,有兴趣的同学可以自己找找答案。

有时候,一个文档、一个项目,只需要你自己一个人就可以搞定,这样你就在自己的创作过程中使用git就好了。但是对于那些一个人搞不定的文档和项目,如果大家各自使用git记录版本,就会又搞出各种各样的版本。这个时候就需要让参与文档编辑、项目实施的所有人共同创作,大家把自己的修改分享给别人,也从别人那里拿到他们的修改。这样就相当于只有一个总的版本修改历史,所有参与者共享这份历史。github就是这样一个让所有参与者共同编辑创作的平台。

GitHub是一个基于Git的代码托管平台,它为开发者提供了一个集中式的、基于Web的代码管理平台。

以下是一个略微不正经的表述:github是全球最大的同性交友平台。

通过github这个平台,无论参与共创的成员身处何处,只要能够访问互联网,他就可以对自己参与的项目进行修改。其他人则可以基于他的修改继续进行新的修改,而不需要额外复制多个文件。

git是一个分布式的版本控制工具,但github却是一个集中式的代码托管平台。

为什么要用 git 和 github

有了汽车之后,坐马车的人越来越少;有了高铁之后,坐普快火车的人慢慢变少。新的工具的出现,无疑都是使用更加方便,并且能够极大提高生产效率的。有了这样方便的版本控制工具,当然就应该抛弃原始的人工版本控制办法了。

git 怎么用安装

git的下载网站为:,上面分别提供了windows、mac、linux版本的下载。mac、linux系统一般都会默认安装git,windows系统需要自己手动安装。

基本命令

新建/初始化仓库

以我正在写的这个文档为例,准备开启一个写100篇教程的计划,这篇git入门就作为第一篇。

在这个git入门文件夹所在的目录下,右键鼠标,如果安装好了git,就能看到一个Git Bash Here,点进去。

git checkout_git checkout_git checkout

弹出的窗口中,执行下面的命令,表示初始化仓库。

git init

初始化之后,仓库就新建好了,此时git status,可以查看仓库的状态,如下图,看到有红色的git入门/,这个就是已修改但未提交的文件,可以理解为git发现了你的修改,但还没有记录下这个修改。

每一个git命令敲下去之后,都会有相应的提示信息。git做的很棒的一点在于,提示信息非常准确,基本上可以根据提示信息完成操作。所以,强烈建议初学的同学认真阅读git窗口中的文字。

git checkout_git checkout_git checkout

提交修改

git add 

执行上面的命令,把所有想要让git记住的文件add一下。可以每次添加一个文件,也可以把整个文件夹添加进去。

提交修改后再执行git status,可以看到,被git记住的文件是绿色,对应的文字是new file,git发现但没有记住的文件是红色,对应的文字是untracked files。

把需要添加的文件用git add命令添加之后,使用下面的命令提交修改:

git commit -m "有助于你记住这次修改的提示信息"
# 例如git commit -m "project init"

分支操作

分支(git branch)是git最核心的概念。git对于文件和文件夹变更的跟踪、管理,都是基于分支进行的。git仓库虚拟化后,会创建一个默认的分支master,即主分支,见上面图中蓝色的master。

一般的方法是,master分支作为正式对外发布的分支,留一个开发分支,或者主题分支做自己正在做的事情。比如我新建一个专门用于git入门文档编写的分支。

首先查看当前已有的分支:git branch,发现只有master分支,然后新建分支:git checkout -b how-to-git,发现git自动切换到了新的分支,当然新分支是基于原有的master分支创建的,所以现在比较这两个分支,发现是没有差别的。

比较分支的命令如下,–stat表示只列出统计信息,不列出具体差别。

git diff <branch-1> <branch-2> --stat

如果输出结果为空,说明两个分支相同。

git checkout_git checkout_git checkout

此时git status命令会显示出你所在的分支和当前文件的变更情况。

这里我们再做一次提交,创建多条提交记录/历史。

此时再比较两个分支的差异,就有区别了:

这里需要注意,git diff branch-1 branch-2后面跟的2个分支名,会以branch-1为基础去计算branch-2相对branch-1发生的改动。所以改变这两个参数,得到的差异是相反的(如上图和下图的关系)。

回退修改

回退修改的前提是需要有可以回退的位置,这里我们再做一次提交。然后查看提交历史,git log [–oneline],方框表示可选参数:

可以看到当前一共有三个提交记录,使用–oneline参数后,输出信息会比较简短。

回退修改,大体上有三种方法:

git checkout git resetgit revert

后两种除非对git有相当的了解,否则不建议使用,可能会让你丢掉一些重要的修改和修改记录而且找不回来!

推荐的方法是,先基于当前分支创建一个新的分支(怎么操作上面已经讲了),然后在新的分支上回退修改。这样当回退也不满意的话,还是可以把这个回退再回退掉的。所以,我新建一个git-doc-2分支,然后在这个分支上回退:

git checkout_git checkout_git checkout

此时有一段报错信息,大意是需要先提交修改之后才能再回退,否则自己的修改就被覆盖掉(而且无法找回),所以再提交一次。

这里看到分支名变成了一串数字:

5b85194a009a2f2a34a3b57c3ea78c6674c5cc0d

这是git记录修改的方式——hash,哈希,这里可以简单地理解为这串数字标记了这个修改位置,一般只需要用到前6位就可以了。还有窗口输出的提示信息,以及git status看到的多了一个分支。

从文档上看,可以发现一些图片没有了,就是被回退掉了,回退到了没有这些图片的提交点。

这个时候的分支不是常规意义的分支,它可以理解为是在旧的提交点上继续修改,实际上是不合适的,所以按照提示新建一个常规分支:

git switch -c git-doc-revert

下图中,回退修改之后还进行了一次提交(因为我在所有分支上都编辑了这个git入门.md文件)。

分支合并操作 merge

这样在现有的四个分支上,除master外,其他三个分支都有我的修改,这样就相当麻烦,需要把另外2个git开头的分支的修改都同步到how-to-git这个分支上。

下面这个命令的用法是,先切换到目标分支,然后在目标分支用这个命令,把修改所在的分支拉到目标分支。

git merge 

下面图中,我切换到how-to-git分支后,想要把git-doc-2和git-doc-revert分支的内容合并到所在分支,所以用了命令

git merge git-doc-2git merge git-doc-revert

但是很明显第二次执行合并操作的时候报错了,CONFLICT,合并冲突是很多git使用者都头疼的问题,以至于即使git提供了冲突标记方法也有很多人看不懂,即使提供了可视化解决冲突工具也有人不会用。所以,看一个人是否掌握了git,就看他能不能很好地解决文件冲突。(这个东西够单独写一篇了,所以此处略去细节)

避免文件冲突的办法,对于自己的项目来说,在不同的分支上不要编辑同一个文件,就不会出现文件冲突。对于个人项目,基本不会有冲突。当依托github平台写作时,才容易出现合并冲突。

像这个文档,我在三个分支都编辑了当前的这个文档,就很容易出问题。

文件冲突

删除分支

解决文件冲突后,当前分支how-to-git就带上了所有分支的修改,成为最新的分支,这样其他的分支就可以删除了。

git branch -d 

git checkout_git checkout_git checkout

有些分支用-d删不掉,是因为这个分支的修改还没有被merge到别的分支,可以理解为,当git认为某个分支上有别的分支没有的修改时,就会向你确认是否删除这个分支。为了显示这条错误,我再提交一次,然后切换到master分支,删除“how-to-git`分支。

大概报错如下:

error: The branch 'how-to-git' is not fully merged.If you are sure you want to delete it, run 'git branch -D how-to-git'.

这种时候,如果确认这个分支已经没有什么利用价值,就可以用-D删除,但是,切记慎用。如果不确定,最好保留这个分支。

暂存修改

场景:某天,你正在分支a上修改a.txt文件,但是马上来了个着急的事情,需要你马上去修改b.txt文件。可是你的a文件已经改了一半,直接切分支又切不了,怎么办呢?

git stash save git stash listgit stash applygit stash pop

大体用法如下,不再展开细说。

git命令汇总

git init    # 初始化仓库git status  # 检查文件修改情况git add / # 添加文件/文件夹
git branch # 查看已有分支git checkout # 切换到已有分支git checkout -b <new-branch-name> # 基于当前所在分支切换到新的分支
# 分支差异比较git diff branch-1 branch-2 --stat # 比较2个分支的差异git diff commit-1 commit-2 --stat # 比较2个commit点的差异
# 回退修改git checkout # 推荐这种回退方式git reset # 慎用git revert # 慎用
# 由commit点新建分支git switch -c git-doc-revert
# 分支合并git merge
# 删除分支git branch -d
# 暂存操作git stash save #暂存git stash list # 查看所有的暂存git stash apply # 从暂存栈中读取最上面那一个,但不删除git stash pop # 从暂存栈中拿出最上面那一个,暂存栈里不再有这个存盘点的暂存文件了

限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: lzxmw777

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注