整理 Git 的基本知识,本文适合了解git部分知识但是不太熟练的童鞋
1、git简介及安装
git是目前常用的一个版本控制系统,由Linus创始人Linus Torvalds发明,github和gitee等都是基于git的远程仓库。
安装很简单:Git下载,下载后一路点击确定即可。安装完Git后通常需要配置用户名和邮箱:
git --global user.name "用户名"
git --global user.email "email地址"
如果要查看git的配置:
git config --list

git的配置其实分为3个,分别是全局配置、用户配置和本地配置,查询时的优先级是本地配置 > 用户配置 > 全局配置。
- 全局配置:通过命令
git config --system --list查看,保存在git安装目录下的/etc/gitconfig文件中。 - 用户配置:通过命令
git config --global --list查看,保存在C盘的用户文件夹下的个人账户文件夹中的gitconfig文件中。例如C:\Users\ccattempt\gitconfig。 - 本地配置:通过命令
git config --local --list查看,保存在本地git仓库(即.git文件夹)的config文件中。
如果要查看某个特定的值,例如user.name:
git config user.name // 可以指定配置,例如:git config --global user.name
如果要设置某个特定的值,例如user.name:
git config user.name yourname // 可以指定配置,例如:git config --global user.name yourname
注意:由于 Git 会从多个文件中读取同一配置变量的不同值,因此你可能会在其中看到意料之外的值而不知道为什么。 此时,你可以查询 Git 中该变量的 原始 值,它会告诉你哪一个配置文件最后设置了该值:
git config --show-origin user.name

2、git基本命令
以下介绍常用的git命令:
1、初始化git仓库
通常我们会遇到两种情况:
- 新建一个项目,需要使用
git进行版本控制 - 已有通过
git控制的项目,需要从远程仓库拉取下来
第一种情况需要使用init命令,运行下面的命令后将会在当前文件夹下创建.git文件夹,因为这个文件夹是隐藏的,因此可能需要打开隐藏项目才可以查看到。
git init

如果是第二种情况,需要使用clone命令:
git clone 远程仓库地址
这同样会在当前文件夹下创建一个.git文件夹,并下载远程仓库的文件。
2、查看状态、修改、提交、撤回、查询日志
我们在初始化或者克隆一个文件后,可以通过git status查看当前状态:
git status

因为目前没有文件的修改和新增,所以提示工作树是干净的,没什么需要提交的。我们新增一个a.txt文件,再查看状态:

此时提示a.txt没有被git捕捉到,需要使用git add命令添加到暂存区:
git add 文件或文件夹路径 // 使用 git add . 或者 git add --all 可以一次提交所有修改到暂存区

这时的状态是已经提交到暂存区,但是还没有提交到本地仓库,需要使用git commit -m "描述信息"命令,并且提示说可以使用git restore --staged 文件路径撤销这次提交,我们先尝试commit:

commit以后这次新增文件的信息就算提交成功了,可以发现工作树又是干净的了。这时这个文件就已经提交到本地仓库了。我们在本地的操作就算完成了。
然而,有时候我们难免手抖,不小心提交了多余的东西到暂存区,这时可以使用git restore --staged 文件路径撤销提交,例如,再新增两个文件b.txt和c.txt,我们本意是分别提交,但是却使用git add .一次性提交到暂存区了:

从暂存区撤销c.txt的提交:
git restore --staged c.txt

此时c.txt又是未追踪状态了。但是如果已经把文件commit了怎么办呢?我们可以使用git reset回退版本,但在之前需要先知道怎么查看提交日志,使用git log可以查看所有提交日志:
git log

使用git log -n可以查看最近的n条日志,例如查看最近一条数据:
git log -1

使用git log --pretty=oneline可以查看日志的简短信息:
git log --pretty=oneline

使用git log --patch可以查看每次提交时的修改,这里我们先修改a.txt,然后查看:

3、分支
可以通过git branch查看当前所有本地分支:
git branch

默认存在一个master分支,也就是主分支。可以通过git branch 分支名新建分支:
git branch 分支名

前面有*号的就是当前分支,可以发现新建了一个dev分支。可以通过git checkout 分支名切换分支:
git checkout dev

当我们在分支上修改了代码之后,需要再把代码合并到主分支,此时需要使用git merge命令:
git merge 需要被合并的分支
我们在dev分支新建dev.txt文件,提交后合并,注意合并前先切换到master分支:

这样dev分支的东西就被合并到master分支了,在master分支可以发现多了dev.txt文件:

如果合并后不需要分支了,可以删除,使用git branch -D 分支名:
git branch -D 分支名

注意合并的过程中可能出现冲突,这时需要先解决冲突,再次新建dev分支,可以通过git checkout -b dev的命令一次性创建并切换到dev分支:
git checkout -b dev

在dev分支的dev.txt添加内容我是dev分支,提交后再切换回master给dev.txt添加内容我是master分支并提交,再合并dev分支:
git merge dev


解决掉冲突再提交即可。
4、远程仓库
通常情况下我们会将代码上传到远程仓库,例如github,可以通过git remote查看当前的远程仓库地址。注意通过git clone下来的项目默认会绑定远程仓库,并给这个地址一个叫origin的别名:
git remote
我们在gitee添加一个远程仓库,然后复制仓库地址,通过git remote add 别名 仓库地址来创建一个远程仓库别名,此后就可以利用这个别名来推送代码到gitee,这里别名设置为firststore:
`git remote add 别名 仓库地址`

远程仓库目前是空的,我们清空本地仓库文件,然后新建README.md文件,提交到本地仓库。此时我们可以先推送到远程仓库,但是如果远程仓库已经有内容了则需要先从远程仓库拉取代码,这里我们先使用git push 远程仓库地址或者别名 本地分支名:远程分支名,如果远程和本地分支名相同也可以简写为:git push 远程仓库地址或者别名 分支名:
git push 远程仓库地址或者别名 本地分支名:远程分支名

这样我们就完成了推送。如果新建的远程仓库已经有内容,则需要先使用git fetch 远程仓库别名先获取远程分支代码:
git fetch 远程仓库别名

这样会发现多了一个远程分支。此时再使用git merge合并:

提示拒绝合并没有被发布的历史,这时需要加上--allow-unrelated-histories,表示允许合并未发布的内容:

合并成功了,但是提示发生了冲突,这是因为远程仓库和本地仓库都有README.md文件,先解决冲突,在vscode上可以清晰的看到冲突内容:

这里我们选择将两个文件内容都保留,重新提交到本地仓库后可以选择推送到远程仓库:

查看远程仓库,可以发现推送成功了:

3、总结
前面说了一大堆,实际日常工作用到的无非是克隆仓库、拉取代码、合并分支、推送分支。流程如下:
1、克隆仓库
首先我们一般有一个远程仓库的分支,例如名字叫dev:

克隆dev分支代码:


修改README.md文件,然后推送到dev分支:

注意origin/dev是远程分支名,可以通过git branch --remotes查看所有远程分支。origin是远程仓库别名。在个人分支上完成自己的任务后,我们需要合并到主分支,这时需要先拉取主分支代码到本地分支,为了模拟多人开发环境,我在远程仓库的master分支也修改了README.md文件。拉取主分支代码需要先fetch再merge:

注意fetch的命令是git fetch 远程仓库别名 远程分支名,不要和git merge 分支名记混了:

已经合并到本地仓库,但是提示冲突,先解决冲突:

解决完冲突后再提交然后推送到远程的dev分支:

然后再发起合并dev到master的请求等待审核通过即可。
4、常用git命令汇总
初始化仓库:
git init
克隆仓库:
git clone 仓库地址
提交代码到暂存区
git add 文件路径
提交代码到本地仓库
git commit -m "描述文字"
查看日志
git log
查看简短日志
git log --pretty=oneline
查看最近n条日志
git log -n
撤销提交到暂存区的文件
git restore --staged 文件名
修改commit的描述文字
git commit --amend
删除暂存区的文件
git rm --cached 文件名
回退版本
git reset --hard 版本号
查看本地分支
git branch
查看远程分支
git branch -r
查看所有分支
git branch -a
新建分支
git branch 分支名
删除分支
git branch -d 分支名
切换分支
git checkout 分支名
新建并切换到新建分支
git checkout -b 分支名
合并本地分支
git merge 分支名
新建远程仓库地址别名
git remote add 别名 远程仓库地址
查看远程仓库别名
git remote
查看远程仓库地址
git remote -v
拉取远程仓库代码
git fetch 远程仓库别名 分支名
合并远程仓库分支
git merge 远程仓库别名/分支名
拉取并合并远程仓库代码
git pull 远程仓库别名 本地分支:远程分支
如果分支名相同也可简写:
git pull 远程仓库别名 分支名
合并未发布的(unrelease)的远程仓库代码
git merge 远程仓库别名/分支名 --allow-unrelated-histories
推送代码到远程仓库
git push 远程仓库别名 本地分支名:远程分支名
如果本地和远程分支名相同可以简写为:
git push 远程仓库别名 分支名
删除远程分支
git push 远程仓库别名 -d 分支名
304

被折叠的 条评论
为什么被折叠?



