创建版本库

版本库又名仓库repository,可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”

创建一个版本库非常简单,首先选择一个合适的地方创建一个空目录:

1
2
mkdir learngit
cd learngit

然后通过git init命令把这个目录变成Git可以管理的仓库

把一个文件放到Git仓库只需要两步
第一步,用命令git add告诉Git,把文件添加到仓库:

1
git add readme.txt

第二步,用命令git commit告诉Git,把文件提交到仓库:

1
2
git commit -m "wrote a readme file"
// -m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD
image-20240202095040958

git status命令可以时刻掌握仓库当前的状态
git diff命令查看具体修改内容
git log命令显示从最近到最远的提交日志
git reflog命令记录你的每一次命令

时光机穿梭

版本回退

在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,往上100个版本写写成HEAD~100,使用git reset命令回退版本

1
git reset --hard HEAD^

指定回到未来的某个版本

1
2
git reset --hard 1094a
// 前几位commit id

管理修改

git checkout -- file可以丢弃工作区的修改:

1
git checkout -- readme.txt

readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态
总之就是让这个文件回到最近一次git commitgit add时的状态

远程仓库

添加远程仓库

1
2
3
git remote add origin git@github.com:username/repository-name.git
//添加后,远程库的名字就是`origin`,这是Git默认的叫法,也可以改成别的
git remote add origin ssh://git@gitlab.huolala.cn:56358/group-sec/hll-waf-expired_rule-check.git

由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令

git push命令把本地库的内容推送到远程,实际上是把当前分支master推送到远程

从现在起只要本地作了提交,就可以通过命令:

1
$ git push origin master

把本地master分支的最新修改推送

新建分支并切换到指定分支

1
git checkout -b 本地分支名 origin/远程分支名

将本地分支推送到远程

1
git push <远程主机名> <本地分支名>:<远程分支名>

删除远程分支

1
git push origin --delete remoteBranchName

分支管理

一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点:

image-20240202103017012

每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长
当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上:

image-20240202103044914

不过从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变

image-20240202103108651

首先创建dev分支,然后切换到dev分支:

1
2
$ git checkout -b dev
Switched to a new branch 'dev'

git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:

1
2
3
$ git branch dev
$ git checkout dev
Switched to branch 'dev'

然后用git branch命令查看当前分支:(会列出所有分支,当前分支前面会标一个*号)

1
2
3
$ git branch
* dev
master

dev分支的工作成果合并到master分支上:

1
$ git merge dev

合并完成后,就可以放心地删除dev分支了:

1
$ git branch -d dev

创建并切换到新的dev分支,可以使用:

1
$ git switch -c dev

直接切换到已有的master分支,可以使用:

1
$ git switch master

当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交

标签管理

在Git中打标签非常简单,首先,切换到需要打标签的分支上:

1
2
3
4
5
$ git branch
* dev
master
$ git checkout master
Switched to branch 'master'

git tag <name>就可以打一个新标签:

1
$ git tag v1.0

可以用命令git tag查看所有标签:

1
2
$ git tag
v1.0