Git使用教程

什么是Git

Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

Git中的基本概念

我们先来理解下Git工作区、暂存区和版本库概念:

  • 工作区: 就是你在电脑里能看到的目录。
  • 暂存区: 英文叫stage或index。一般存放在.git目录下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
  • 版本库: 工作区有一个隐藏目录**.git**,这个不算工作区,而是Git的版本库。
  • 远程仓库: 就是如Github或者其他平台上发布的代码。

如何使用

配置用户

开始使用之前我们需要配置用户信息:

text
1
2
git config --global user.name"用户名"
git config --global user.email"邮箱"

这里的用户名和邮箱可以乱填,仅仅是区分不使用者的作用。如果去掉 –global 参数只对当前仓库有效。

创建仓库

创建仓库有两种方法,一种是本地文件夹作为一个新的仓库,另一种的将远程仓库克隆到本地作为一个仓库。

创建新仓库

以当前目录仓库作为Git仓库,我们只需要将其初始化:

text
1
git init

该命令执行完后会在当前目录生成一个.git目录。

检出仓库

即使用git clone从现有Git仓库中拷贝项目。执行如下命令以创建一个本地仓库的克隆版本:

text
1
git clone /path/to/repository

如果是远端服务器上的仓库,你的命令会是这个样子:

text
1
git clone username@host:/path/to/repository

提交与修改

你对文件完成更改之后,便可以将他们提交(把它们添加到暂存区),使用如下命令:

text
1
git add <filename>

如果文件过多,一个一个修改过于麻烦,也可以一次性提交所有文件:

text
1
git add .

当多次提交后我们无法记得每次提交都修改了些什么内容,我们可以在提交完后写上一些备注:

text
1
2
git add <filename>
git commit -m "备注"

这样,我们在之后就可以很方便的了解每次提交都修改了些什么内容,我们可以使用以下操作来查看历史提交记录(包括提交人,提交时间,内容备注):

text
1
git log

这个命令还可以添加很多参数来提供更为详细的信息:

参数 说明
-p 显示提交的补丁(具体更改内容)。
–oneline 以简洁的一行格式显示提交信息
–graph 以图形化方式显示分支和合并历
–decorate 显示分支和标签指向的提交
–author=<作者> 只显示特定作者的提交
–since=<时间> 只显示指定时间之后的提交
–until=<时间> 只显示指定时间之前的提交。
–grep=<模式> 只显示包含指定模式的提交消息。
–no-merges 不显示合并提交。
–stat 显示简略统计信息,包括修改的文件和行数。
–abbrev-commit 使用短提交哈希值。
–pretty=<格式> 使用自定义的提交信息显示格式。

除此之外,我们还可以以列表形式查看指定文件的历史修改记录:

text
1
git blame <file>

每次提交后都有一个commit id,我们通过历史提交记录可以获取每次的commit id,这个commit id可以帮助我们查看这次提交到底修改了哪些内容:

text
1
git diff [commit id]

代码回溯

前面说了可以查看项目的历史版本,这显然不够用,有时候我们还会有回到某一历史版本的需求,下面两条指令均可以完成我们的需要:

text
1
git reset --hard [commit id]
text
1
git checkout [commit id]

分支

Maser分支是由git自动创建的,一般用来保存经过测试的稳定代码,一般不轻易改动,我们用下面这个命令可以查看当前都有哪些分支。

text
1
git branch

我们可以使用下面这个命令来创建一个新的分支,并切换到新的分支完成新功能的开发:

text
1
2
3
4
5
6
git branch [branchname]
git checkout [branchname] //切换到新的分支

git checkout -b [branchname] //创建并切换到新的分支

git branch -d [branchname] //把新建的分支删除

除非将分支推送到远端仓库,不然别人是看不见这个分支的。

当你切换分支的时候,Git会用该分支的最后提交的快照替换你的工作目录的内容,所以多个分支不需要多个目录。

当我们完成新的开发时,需要将我们创建的分支的代码合并到Master分支上

text
1
2
3
4
5
6
7
git add .
git commit -"备注"

//下面进行合并

git checkout master
git merge [branchname] //将分支合并到master上

远程操作

下面是工作区,暂存库和远程仓库三者之间的关系。

本地仓库修改完成后我们可以手动推送到远程仓库:

text
1
2
3
git fetch    //从远程获取代码库
git pull //下载远程代码并合并,通常在多人合作别人改完项目并上传后
git push //上传远程代码并合并

总结

个人感受

作为一个刚开始学习 Git 的初学者,起初我觉得它有点复杂,尤其是各种命令和概念,比如工作区、暂存区和版本库,让人有些摸不着头脑。不过使用的增加,git其实很有用,甚至可以说是开发中不可缺少的工具。

为什么要用 Git?

在写代码的时候,经常会遇到改了半天发现不如原来的好,甚至不小心把重要的代码删了。这时候如果没有备份,就只能重写,真的是一件让人崩溃的事。而有了 Git,就相当于给每次改动都存了备份,随时可以回到过去的某个版本。这种感觉只能用爽来形容。

分支的作用

在原有代码的基础上开发新功能时,可以开一个新的分支去尝试,这样担心会影响到主分支的稳定代码。等新功能完成并测试好,再把它合并到主分支上。

怎么减少 git 冲突

当不同的人在同一个文件的同一行做了修改时,Git 会让你手动选择保留哪一部分,其实 git 也不知道以谁的为准,所以需要手动来解决这个问题。
关于这个问题,其实可以多进行 git pull ,这是一个减少冲突发生概率的操作。当你要对一行代码进行改动时,先拉取,如果对方改了,是对的就不用改了;如果是错的,改了在退上去也不会触发冲突。
我觉得还有一个其他的解决方案就是提 pr,通过合并分支来解决这个问题。


参考文献

git 简明指南


Git使用教程
https://serendipity565.github.io/posts/b5bfdfa6aa51/
作者
Serendipity
发布于
2024年3月13日
许可协议
BY-SERENDIPITY565