Git简易入门

全文共约4500字,阅读完需要大约10分钟。第一次写长文,如有错误,请在评论区指出,我会及时改正。

Git简介

什么是Git

Git是目前世界上最先进的分布式版本控制系统,最初由林纳斯·托瓦兹创作,git最初只是作为一个可以被其他前端包装的后端而开发的,但后来git内核已经成熟到可以独立地用作版本控制。很多被广泛使用的软件项目都使用 git 进行版本控制。

我可以用Git做什么

除了用作开发软件的版本控制,git还有许多其他妙用,比如通过对tex文件的版本控制实现写论文时的版本控制。

Git的安装

大部分Unix和Linux的发行版都自带Git,如果没有的话也可以通过系统自带的包管理器或者Homebrew进行安装,当然对于有些系统则需要自行从源码构建。 对于Windows系统,可以从官方仓库下载安装包进行安装,对于Windows11用户,可以很方便的使用winget工具在Powershell命令行进行安装:

1
winget install --id Git.Git -e --source winget

安装完成后,在命令行使用以下两条命令设置你的全局用户名和邮箱,当你修改文件时将用该身份进行修改:

1
2
git config --global user.name "your_username"
git config --global user.email "your_email"

Git的基本使用

版本仓库

选择或者新建一个文件夹作为版本仓库(repository),一般一个版本仓库只用于一个项目,版本仓库下所有文件的更改都会被Git记录。 进入要用作版本仓库的文件夹,右键-在终端中打开即可打开终端并进入当前目录,使用以下命令初始化该文件夹为版本仓库:

1
git init

这时目录下会出现一个名为.git的隐藏文件夹,即代表仓库已经建立完成。

本地版本控制

暂存文件

使用以下命令提交文件到暂存区:

1
2
git add fileName.txt
git add .

第一条命令是将名为fileName的文本文档保存到暂存区,第二条命令是将目录下(工作区)所有文件都保存到暂存区。注意:Git对于文本格式的文档如txt、py等代码文档可以记录其变化内容,而对于二进制文档如视频、图像、Word文档只能记录其大小变化,无法记录其变化内容。

提交修改

保存文件到暂存区后,还需要将其保存到仓库更改才会生效:

1
git commit -m "Your commit"

引号内是提交这次更改的注释内容,可以是解释更改了什么之类的。 有需要时也可以将修改添加到上一次提交中:

1
git commit --amend

注意:commit命令提交的是暂存区的文件,而不是工作区的

查看修改

使用下列命令查看仓库当前状态,即当前文件夹(工作区)和仓库的是否有文件不同:

1
git status

对于一个特定的文件,可以查看工作区该文件和仓库里的文件的区别:

1
git diff fileName.txt

用以下命令查看仓库版本历史:

1
git log

版本回退

上一步最后看到修改历史中有一大串十六进制字符串,这个字符串就是版本号,在使用版本号时,只要写出能唯一标识该commit的版本号的前几位就可以。使用以下命令回退:

1
2
3
git reset --hard 4ca140
git reset HEAD^^
git reset HEAD~4

第一行是回退到对应版本号版本,第二行是回退到两个版本前(几个^代表几个版本前,HEAD代表当前版本),第三行是回退到四个版本前,相当于HEAD^^^^注意:使用--hard参数回退时,工作区所有未提交的文件会全部丢失且不可恢复。不使用--hard则只回滚仓库而不回退本地文件。 如果你回退版本后又反悔了,可以使用新版本的版本号回到新版本,使用以下命令查看你仓库的所有修改记录:

1
git reflog

使用以下命令来撤销工作区的修改,回到暂存区状态,如果暂存区没有该文件就回到版本仓库的状态:

1
git checkout -- fileName.txt

使用以下命令来将暂存区的文件撤销:

1
git reset HEAD fileName.txt

删除文件

使用以下命令来将删除文件操作推送到暂存区:

1
git rm fileName.txt

之后正常提交到仓库即可。

远程仓库

连接远程仓库

在GitHub上新建一个repository,复制仓库地址: 可以看到GitHub已经给出本地连接的命令提示了:

1
git remote add origin 仓库地址

推送本地仓库到远程仓库:

1
git push -u origin master

第一次推送时,因为远程仓库是空的,需要带上-u新建master分支并与本地关联,之后可以直接进行推送:

1
git push origin master

注意事项

第一次推送github可能需要你验证登录,使用你创建仓库的GitHub账户验证即可。推送后,你应该就可以在GitHub上看到你推送的文件了。 如果你在推送时报以下错误:

1
fatal: unable to access 'https://github.com/You/yourRepo.git/': Failed to connect to github.com port 443 after **** ms: Timed out

应该是由于你的网络供应商屏蔽了github.com,关于这点网上有许多解决方法,包括修改hosts文件之类的,这里推荐一种最简单有效的方法:为Git设置代理,但是需要你有一个可用的代理,在终端执行以下命令:

1
2
git config --global http.proxy 127.0.0.1:7890
git config --global https.proxy 127.0.0.1:7890

127.0.0.1:7890 换成你使用的代理服务器地址及端口即可,如果你的代理设置没有问题,之后就可以正常推送了。 在Github仓库页面点击

即可查看编辑历史。之后即使没有网络也可在本地进行修改,等联网时再推送到远程仓库即可。

删除远程仓库

使用以下命令断开本地仓库与远程仓库的链接:

1
2
git remote -v
git remote rm origin

第一条命令列出已连接的远程仓库,第二条命令删除名为origin的远程仓库的连接。

从远程仓库克隆到本地

下面这条命令是Git中最有用的一条命令:

1
git clone https://github.com/user/RepoUrl.git

将后面的链接换成你要克隆到本地的仓库地址,即可克隆别人的仓库代码,之后按照自己的需求编译就可以使用别人在Github上开源的软件了。

分支管理

当我想给项目加一个新功能,但是新功能还只开发到一半,我们提交的话别人就要在我开发了一半的基础上开发其他功能,这时候就可以新建一个分支,等开发完这个功能再合并到主分支上去,也不会影响别人开发。

创建与切换分支

查看当前所有分支:

1
git branch

创建并切换分支:

1
2
git branch dev
git checkout dev

第一条命令创建了一个新的分支 dev,第二条命令切换到新建的dev分支。以上功能也可以用一条命令完成:

1
git checkout -b dev

以下命令也是等效的:

1
git switch -c dev

使用switch也可以切换分支:

1
git switch dev

切换到dev分支然后将该分支推送到GitHub,即推送命令最后一个参数master换成dev,然后就可以在GitHub上看到新分支的内容了。

合并分支

新分支开发到一定程度,就可以和主分支合并了,先切换到master分支,然后使用以下命令合将dev分支合并到当前分支:

1
git merge dev

之后推送到远程仓库即可。使用以下命令删除本地和远程仓库的dev分支:

1
2
git branch -D dev
git push origin --delete dev

复制一个特定提交到当前分支:

1
git cherry-pick commitID

拉取提交

多人合作开发一个分支时,提交前先拉取,保证别人的更改都同步到了你本地:

1
git pull

拓展

标签管理

使用以下命令打标签:

1
2
3
4
git tag v1.0
git tag v0.9 4ca1402
git tag -a v0.1 -m "version 0.1 released" 4ca1402
git push origin v1.0

第一条命令为最新的commit打上v1.0的标签,第二条命令为特定commit打上标签,第三条命令为特定commit打上带说明的标签,第四条命令将标签推送到远程仓库。

发起Pull Request

Github的一大好处就是可以让别人参与你的开源项目,在fork别人的仓库并做一定修改后,可以发起Pull Request,请求仓库管理者合并你的修改。

使用git checkout进行回退

使用以下命令回退到特定commit并成为一个新分支,原分支不会改变:

1
git checkout commitID

使用以下命令回退特定文件,是直接在原分支上的更改,在提交commit后会应用到仓库:

1
git checkout commitID -- fileName.txt

使用SSH连接至Github

前面连接Github使用的是HTTPS连接,当然我们也可以使用更快速且安全的SSH进行连接。首先,在命令行运行ssh-keygen.exe,一路回车之后,在程序提示的路径(一般是C:\Users\YourUserName/.ssh/文件夹下)找到公钥id_rsa.pub,用记事本打开并复制其内容,在GIthub依次进入Settings-SSH and GPG keys-New SSH key,tittle填入方便你识别不同设备的标识,key粘贴刚刚复制的公钥,点击下方的Add SSH key,按步骤进行即可,这样再连接远程仓库的时候就可以使用SSH链接进行连接了,已经用HTTPS进行连接的仓库要先断开链接,再用SSH链接进行连接。仓库的SSH链接可以在下图所示位置复制:

除了SSH连接确保安全外,你也可以使用GPG密钥验证来防止别人冒充你提交commit,具体可以参考这篇文章

相关参考网站

作者

Jinyao

发布于

2022-06-30

更新于

2025-04-28

许可协议

评论