git&github够用指南

127 阅读5分钟

git&github介绍

你有没有遇到过这种情况,代码改了半天发现还不如第一版,结果第一版还没保存。

或者你现在每写一遍代码就会在另外的地方保存一遍。

如果你出现以上两个问题那说明git一定是你的好帮手。(标题不是git介绍吗?因为git也只是一个工具,要掌握一个工具最好的方法就是带着痛点,带着问题学习。插一句,我认为计算机专业的学生的能力就是利用工具来解决自己的困难,包括利用工具提升自己的效率。)

git的第一个作用就出现了,管理自己本地代码。

而且说到git就不得不说github--全球最大同性交友平台。这么说吧当时我用git的终极目的就是把代码放在github上。

不过你要明白一点就是如果只用git管理自己代码,其实根本用不到gihub。

不过github与git的第二个功能密切相关,协助进行团队开发。(先说好我本人也没进行过什么团队开发,所以对于这方面没什么了解)

git原理

先说好这不是什么重要的东西对于我们够用指南来说。

git是linux在开发linux kernel是搞出来的,通过最基本的链表解决代码分支问题,链表的对象是程序的快照,通过指针移动即可实现版本的切换。

image-20221224004022974

简单使用

工作流程

分为当前目录,工作目录,暂存区,git仓库

image-20221224005306851

当前我们在test目录,只有一个a.c文件

image-20221224005519781

a.c

image-20221224005553311

初始化

git config --global user.name "Zhang San"        # your name
git config --global user.email "zhangsan@foo.com"    # your email
git init

image-20221224004934004

test经过初始化后已经变成了工作目录了

存档

如果你的开发取得了一些阶段性成果, 你应该马上进行"存档".

使用 git add 将文件加入跟踪列表, 例如

git add a.c

image-20221224010131403

现在a.c就在我们的暂存区内,换言之它被跟踪了。

如果需要一次添加所有未被跟踪的文件, 你可以使用

git add -A

但这样可能会跟踪了一些不必要的文件, 例如编译产生的 .o 文件, 和最后产生的可执行文件. 事实上, 我们只需要跟踪代码源文件即可. 为了让 git 在添加跟踪文件之前作筛选, 你可以编辑 .gitignore 文件(你可以使用 ls -a 命令看到它), 在里面给出需要被 git 忽略的文件和文件类型.

但现在并没有完成存档,现在a.c只是在我们的暂存区,我们还要进行commit,把它加入仓库(注意只是本地仓库,与github上的仓库还没关系)

git commit -m "注释"

image-20221224010807737

查看存档信息

使用

git log

查看目前为止所有的存档.

使用

git status

可以得知, 与当前存档相比, 哪些文件发生了变化.

git log

image-20221224010958812

按q退出

git status

现在肯定什么也看不出,因为刚提交完,这个时候随便创建一个b.c再git status看一下

image-20221224011301011

把b.c删除之后

image-20221224011450316

读档

如果你遇到了上文提到的问题,就可以用git来解决了。首先使用 git log 来查看已有的存档, 并决定你需要回到哪个过去. 每一份存档都有一个hash code, 例如 b87c512d10348fd8f1e32ddea8ec95f87215aaa5 , 你需要通过hash code来告诉 git 你希望读哪一个档. 使用以下命令进行读档:

git reset --hard b87c

其中 b87c 是上文hash code的前缀: 你不需要输入整个hash code. 这时你再看看你的代码, 你已经成功地回到了过去!

现在我把a.c改一下

image-20221224011758988

想要回去

通过git log找到之前的code

前面已经看过了,hash code77b1

接下来

git reset --hard 77b1

image-20221224012238755

a.c

image-20221224012305309

但事实上, 在使用 git reset 的hard模式之前, 你需要再三确认选择的存档是不是你的真正目标. 如果你读入了一个较早的存档, 那么比这个存档新的所有记录都将被删除! 这意为着你不能随便回到"将来"了.

第三视点

当然还是有办法来避免上文提到的副作用的, 这就是 git 的分支功能. 使用命令

git branch

查看所有分支. 其中 master 是主分支, 使用 git init 初始化之后会自动建立主分支.

读档的时候使用以下命令

git checkout b87c

而不是 git reset . 这时你将处于一个虚构的分支中, 你可以

  • 查看 b87c 存档的内容

  • 使用以下命令切换到其它分支

    git checkout 分支名
    
  • 对代码的内容进行修改, 但你不能使用

    git commit
    

    进行存档, 你需要使用

    git checkout -B 分支名
    

    把修改结果保存到一个新的分支中, 如果分支已存在, 其内容将会被覆盖

现在我们改一下a.c

image-20221224015147896

再把它提交一下

git log

image-20221224015222267

现在我们就有两个提交了

接下来

git checkout 77b1

image-20221224015603215

a.c

image-20221224015621866

现在修改一下a.c

image-20221224015749426

再新建一个分支

image-20221224015929427

看这个分支a.c

image-20221224020005767

git branch

image-20221224020044908

github

首先我们去github干什么?白嫖。不,是学习别人的项目。

首先就是克隆别人的项目

git clone

image-20221224022144267

把这个结尾是.git的url复制下来

接下来学如何把我们的仓库放到github上

先建一个仓库

然后再我们工作目录中设置远程仓库。我以前就是不知道仓库还分本地和远程,

image-20221224023005843

下面两行就是把原来的master分支改名为main分支,因为他们决定master这个词有奴隶主的感觉,不好,就改为main了

本来到这里输一下你的账号密码就行,但现在不行了。因为现在github要tokens登录

image-20221224024100152

具体怎么做你就自己就stfw把

结果

image-20221224025036797

image-20221224025046503

参考资料

  1. 大部分内容来自nju的pa实验文档的git入门(git入门教程 · GitBook (nju-projectn.github.io)
  1. A Visual Git Reference(A Visual Git Reference (marklodato.github.io))中文名叫图解git 我觉得还挺好

ps:这几天阳了,头好疼,同学们注意身体呀