Git 快速入门

想象一下你正在玩超级马里奥, 你今晚的目标是通过所有关卡, 不然就不睡觉. 经过千辛万苦, 你拿到了最后一关, 就要看到成功的曙光的时候, 你竟然失手了! 你悲痛欲绝, 滴血的心在呼喊着, "为什么上天要这样折磨我? 为什么不让我存档?"

人生就像不能重玩的马里奥, 但软件工程领域却并非如此, 它有一套"版本控制系统", 能够让你在过去和未来中随意穿梭, 避免这样的悲剧降临你的身上.

没听说过版本控制系统就完成实验, 艰辛地排除万难, 就像游戏通关之后才知道原来游戏可以存档一样, 其实玩游戏的时候进行存档并不是什么丢人的事情.

Git 就是“神奇的版本控制系统”.

在项目开发过程中,代码会不断被修改、更新,许多码农通常将代码储存到一个(共有/私有)仓库,它为项目提供了一种结构化的方式来管理代码、历史记录和协作开发。而 Git 就是用于管理仓库的工具,它可以存储项目的所有代码文件以及每次的变更记录、在不同的时间点保存项目的多个版本,开发者可以在这些版本间自由切换、回溯,that's cool!

下面简单介绍如何使用 git .

1.安装与设置

安装 Git 的命令如下:

$ sudo apt-get update  //非必须
#安装git工具
$ sudo apt-get install git   

安装完成后可以进行一些配置:

git config --global user.name "Zhang San"		# your name
git config --global user.email "zhangsan@foo.com"	# your email
git config --global core.editor vim			# your favourite editor
git config --global color.ui true

上述四行用来配置 Git 提交的一些信息,其中 --global表示全局有效,若只想要对某个仓库有效,可以在某仓库的目录下进行设置,并去掉 --global,详细解释如下:

git config --global user.name "Zhang San"

指定你在 Git 提交中的用户名,它会被嵌入到每次提交记录中,表示这个提交是由谁创建的。

git config --global user.email "zhangsan@foo.com"	# your email

指定你在 Git 提交中的用户邮箱,它会被嵌入到每次提交记录中,表示这个提交的用户邮箱。

git config --global core.editor vim	

这个配置项用于指定 Git 在需要用户编辑信息时(如提交信息、合并冲突时)使用的默认文本编辑器。这里将 vim 设置为 Git 的默认文本编辑器。每当 Git 需要你输入文本(例如提交信息时),它会打开 vim 让你编辑。你也可以设置其他文本编辑器。

git config --global color.ui true

启用 Git 颜色显示。它使 Git 在输出状态、差异(diff)、日志等命令时,Git 会使用颜色对输出内容进行高亮显示,方便你更好地查看和理解输出的内容,如果你不想让 Git 显示颜色,可以将 color.ui 设置为 false。 

2.基本操作

(1)克隆仓库

#克隆仓库
$ git clone <仓库URL>

<仓库URL>:是远程仓库的地址,支持多种协议(如 HTTPS、SSH 等)。你可以从 GitHub、GitLab、Bitbucket 等平台上获取仓库的 URL 。可以理解为仓库的网址。

克隆页面如下:

克隆完成后当前目录下会多出一个新的文件夹。

 克隆时,若未指定克隆的分支与克隆到的目录,默认克隆全部分支,克隆到当前目录。

若你想要克隆到指定目录/克隆指定分支,那么你可以采用以下命令:

#将仓库克隆到指定目录
$ git clone <仓库URL> <目标目录>
#克隆仓库的指定分支
$ git clone -b <分支名> <仓库URL>

(2)查看存档信息

使用:

git log

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

使用git log 会显示HEAD -> master(举例而已,并非一定是master),头指针指向master,代表你当前所在位置,位于master分支。同时你还可以看到你的仓库目前为止所有的提交信息。

使用:

git reflog

 也可以查看版本信息,但它只显示你提交、回溯过的版本,以及进行分支切换的信息。

使用:

git status

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

显示的信息很详细,它显示你目前处于pa1分支,各个文件的修改以及未跟踪的文件(指你在仓库中新建的文件/文件夹)。

如果你希望查看更详细的信息 ,使用:

git diff

 它可以更详细的看到,你对某个文件的修改(哪些行被添加,哪些行被删除):

VScode玩家更加便捷, 点击红色方框内的选项即可:

它可以将你现在的代码与你上一版 提交的代码进行一个对比,更加直观的看出代码的修改情况。

(3)存档

你可以像以前一样编写代码,等到你的开发取得了一些阶段性成果, 你应该马上进行"存档"。

首先你需要使用 git status 查看是否有新的文件或已修改的文件未被跟踪, 若有,则使用 git add 将文件加入跟踪列表,例如

git add file.c

会将 file.c 加入跟踪列表。 如果需要一次添加所有未被跟踪的文件,你可以使用

git add -A

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

把新文件加入跟踪列表后,使用 git status 再次确认,确认无误后就可以存档了,使用

git commit

提交工程当前的状态。执行这条命令后,将会弹出文本编辑器,你需要在第一行中添加本次存档的注释,例如"fix bug for xxx". 你应该尽可能添加详细的注释,将来你需要根据这些注释来区别不同的存档。编写好注释之后,保存并退出文本编辑器,存档成功。你可以使用 git log 查看存档记录,你应该能看到刚才编辑的注释。

(4)读档

如果你遇到了上文提到的让你悲痛欲绝的情况,现在你可以使用 Git 来救你一命了。首先使用 git log 来查看已有的存档, 并决定你需要回到哪个过去, 每一份存档都有一个hash code(哈希码), 例如 b87c512d10348fd8f1e32ddea8ec95f87215aaa5 ,你需要通过hash code来告诉 git 你希望读哪一个档。使用以下命令进行读档:

git reset --hard b87c

其中 b87c 是上文hash code的前缀: 你不需要输入整个hash code。 这时你再看看你的代码, 你已经成功地回到了过去!如果你只是从过去的版本查看一些代码,查看后想要回到你回退之前的版本,任然可以通过git reflog,查看你提交的版本信息,进行回退。

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

(5)分支切换

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

git branch

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

读档的时候使用以下命令:

git checkout b87c

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

  • 查看 b87c 存档的内容
  • 使用以下命令切换到其它分支(改版本下的其他分支)
git checkout 分支名
  • 对代码的内容进行修改,但你不能使用 git commit 进行存档,你可以使用:
git checkout -B 分支名

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

不同的分支之间不会相互干扰, 这也给项目的分布式开发带来了便利. 有了分支功能, 你就可以像第三视角那样在一个世界的不同时间(一个分支的不同存档), 或者是多个平行世界(多个分支)之间来回穿梭了。

3.结语

(1)推荐一个方法:添加自定义命令

查看存档信息时,我通常使用:

git log --all --graph

它提供了更丰富、更结构化的历史信息,特别是在查看分支结构和代码历史时更直观。

但是它有点长,我每次都需要输入这么多单词,想“偷懒”怎么办?(~ ̄▽ ̄)~ 

修改Bash shell 的配置文件!

终端输入,打开shell 配置文件:

vim ~/.bashrc

(此处我使用的 vim 编辑器进行编辑,你也可以采用其他编辑器.)

找到“ # some more ls aliases ”注释的位置,大概在90行的样子。(vim 配置行号点这里

前三个是系统自带的,咱们可以照葫芦画瓢,我添加了 glap 作为“git log --all --graph”命令的展开,这样,我就可以直接在终端输入 glap ,达到和 git log --all --graph 一样的效果。

不信可以试一下哦  ε≡٩(๑>₃<)۶ 

这里以 greprn 为例( greprn 展开是 正则表达式 搜索) :

我输入greprn 相对于输入 grep -rn --binary-files=without-match,是不是特别方便  (。・ω・。) 

(2)推荐一个工具 

如果你不希望在自己的仓库练习git,万一玩坏了可咋整,那么你可以自己建立一个新仓库,在里面可以疯狂玩耍,大不了玩坏了就删除仓库(毕竟只是练习用的,没有克隆有用的源码)。

建立仓库可以使用 github 或者 gitee

如果你觉得建立个仓库麻烦,那么!墙裂推荐一个工具:Learn Git Branching

里面有丰富的动画,可以帮助练习 git ,理解 git 的各种操作,不久后你将成为 git 大佬 ( • ̀ω•́ )✧ 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值