再不会git你就要out了~

220 阅读6分钟

一、安装git

安装链接:git-scm.com/ , 一路next就安装成功了!

安装成功后,我们右击鼠标可以看到了多了个 git bash、 git gui等。

Snipaste_2022-07-14_15-03-20.png

一、git建立链接

当我们首次使用git时,git要记录是谁在使用它,因此我们需要输入bash窗口输入:

git config --global user.name "你的用户名"

git config --global user.email "你的邮箱地址"

首先建立好仓库,我拿gitee的仓库做例子(因为比较快嘛),一般情况下创建好仓库后直接git clone + 仓库地址,git会直接使得远程仓库和本地仓库直接联系起来。

Snipaste_2022-07-14_15-03-20.png

克隆代码之前,我们需要验证身份。HTTPS的验证方式就是账号和密码验证,在执行git clone + 项目地址的时候,会弹出让我们输入用户名和密码,验证通过就可以克隆下来了。

1.1 SSH验证

SSH验证需要我们添加公钥,ssh的项目路径为:git@xxxX开头的。

Snipaste_2022-07-14_15-03-20.png 因为我没有添加密钥,所以克隆失败了。

添加密钥,打开git bash!记得是git bash,普通的powershell可能不存在这个命令,然后输入

cd ~/.ssh

$ ssh-keygen -t rsa -C "your_email@example.com", 然后一路回车就ok了。

出现这个画面就表示公钥生成成功了。

Snipaste_2022-07-14_15-03-20.png

生成的位置一般在c盘的用户盘中的.ssh文件夹里面。

比如:C:\Users\amite.ssh

Snipaste_2022-07-14_15-03-20.png

1.2添加SSH公钥

gitee上面添加

Snipaste_2022-07-14_15-03-20.png

将id_ras.pub中的内容复制到公钥

Snipaste_2022-07-14_15-03-20.png

git clone + ssh地址

Snipaste_2022-07-14_15-03-20.png

github添加

Snipaste_2022-07-14_15-03-20.png

步骤都是一样的,我就不一一操作了~

二、git的基本操作

2.1 git add + git status

当我们编写好代码以后执行:“git add .或者 git add+文件名”,前者是追踪所有的文件,后者是追踪某个文件。当我们想要查看哪些文件是被跟踪的,我们只需要“git status”就可以看到我们git追踪的所有文件以及文件的状态。

Snipaste_2022-07-14_15-30-14.png

这里可以看到我们新增了一个index.html文件,git也在跟踪这个文件,然后执行“git commit -m "提交信息" ”,就可以把代码提交到git的本地仓库,暂时没有提交到远程仓库。

当我们修改某个文件或者新增某个文件,都要重新执行一遍“git add .”,让git重新追踪该文件,通过“git status”可以清楚的看到文件是新增的还是修改的。

Snipaste_2022-07-14_15-30-14.png

2.2 git commit

通过执行“git commit -m 'first commit' ”,我们已经把代码添加到本地仓库了,可以通过"git log"查看添加到本地仓库的记录。

2.3 git log

Snipaste_2022-07-14_15-30-14.png

执行git log可以查看提交的commit的历史记录,"git log --pretty=oneline"(一行显示信息)

2.4 git reset

执行git reset可以回退到commit的某个版本,"git reset --hard + (我们通过查看git log中的commit后面的一长串字符)"

Snipaste_2022-07-14_15-30-14.png

这里可以看到我已经回退到第一次提交的代码中,我第二次提交的main.js已经被系统给删除了。

2.5 git push

执行该操作可以将本地仓库的代码提交到远程仓库。

Snipaste_2022-07-14_15-30-14.png

2.6 git tag

执行"git tag + (标签名可以给重大的版本打上标签 便于查找)",例如当一个项目已经开发好了之后,我们可以给当前版本打上tag

Snipaste_2022-07-15_13-19-49.png

//git tag + 名字 创建tag

//git + tag 查看tag

//git push origin tag名字 推送到远程仓库

//git checkout tag名字 切换到该tag

注意:如果切换到对应的tag,千万不要直接修改代码,而是创建一个新的分支来继续修改代码。

例如:我们发布了一个项目v1.0的版本,打上了一个v1.0的tag(git tag v1.0),接着又继续开发项目v2.0的版本,但是V1.0的版本存在bug,而且v2.0还没开发完成,这时候我们就要回到v1.0去修改bug,具体操作如下

首先看到的是正在开发中的v2.0的版本

Snipaste_2022-07-15_13-19-49.png

首先回到v1.0的tag,可以看到跟上面的相比少了aa.js文件

Snipaste_2022-07-15_13-19-49.png

创建一个分支修复bug,可以看到创建了一个fixBug的分支,并且已经修复好了bug。既然我们发现了bug,我们后面开发的v2.0的项目肯定也存在相同的bug,因此我们需要把这个分支的代码合并到v2.0当中。

Snipaste_2022-07-15_13-19-49.png

合并分支,出现冲突

切换到我们需要合并的分支当中,并执行(git merge + fixBug(分支名称))

Snipaste_2022-07-15_13-19-49.png

2.7 解决冲突

因为当我们git合并的时候,数据是来自不同的分支,git这个时候不知道听谁的命令,这个时候我们可以手动修复也可以利用vscode帮助我们修复。

手动修复: 删除<<< Head >>>>fix。。。等这些,选择自己想要保留的内容。

vscode修复:

Snipaste_2022-07-15_13-19-49.png

我这里选择两者都保留以后,vscode会自动帮助我们删除冲突。

Snipaste_2022-07-15_13-19-49.png

这样我们就可以愉快的提交代码了~ git add. git commit -m 在继续走一遍。

Snipaste_2022-07-15_13-19-49.png

2.8 git pull

执行"git pull"将远程仓库的代码拉取下来,一般在提交自己的代码前必须拉取一下仓库的新代码(因为有可能是多人开发)。

三、git的分支操作

分支相当于我们拷贝了多份相同的代码,然后取了不同的名字,这些操作不需要我们一一自己去做,git已经帮我们管理好了。 很多的时候我们开发都是多人开发,为了互不干扰,每个开发人员应该拥有自己的独立分支,然后开发完成之后在进行合并到主分支。

//创建分支 "git branch + 分支名 " 创建分支并自动切换到该分支(“git checkout -b + 分支名 ”)相当于"git branch 和 git checkout"

//查看分支 "git branch"

//切换分支 "git checkout + 分支名 "

如图所示,通过“git branch demo ”创建了一个demo分支,通过 "git branch"查看分支,最后"git checkout demo"切换到该分支中。

Snipaste_2022-07-14_15-57-24.png

3.1 合并分支

当前处于demo分支,然后开发代码,在通过"git add. git commit -m git push",提交自己的代码到远程仓库,注意当分支提交第一次的时候需要通过(git push --set-upstream origin test),因为系统的默认分支还是master,你切换到test他不知道提交到哪里,所以需要指定下。

Snipaste_2022-07-14_15-57-24.png

test分支中的内容,多了个main.js文件。

Snipaste_2022-07-14_15-57-24.png

master分支中的内容

Snipaste_2022-07-14_15-57-24.png

合并demo分支

我们想要往master分支合并内容,首先我们要切换到master分支,在通过执行"git merge + 需要被合并的分支",合并成功以后在推送到远程仓库git push就ok了

Snipaste_2022-07-14_15-57-24.png

Snipaste_2022-07-14_15-57-24.png

合并成功以后可以看到master里面也有了main.js文件。

// git branch --merged (查看已经合并的分支)

// git branch --no-merged(查看没有合并的分支)

// git branch -D + 分支名 (强制删除某个分支)

Snipaste_2022-07-14_15-57-24.png