Git使用步骤
1、Git客户端(入门咯)
官网
1 | http复制代码https://git-scm.com |
下载页面
1 | http复制代码https://git-scm.com/download/win |
建议下载 64-bit Git for Windows Portable 。
下载后得到 PortableGit-2.41.0-64-bit.7z.exe 自解压文件,
将其复制到 D:/ecuter/applications 目录下,双击启动自解压。
最后将 D:\ecuter\applications\PortableGit\bin 添加环境变量的 Path 变量中。
这里我多提一嘴,如果你默认安装在C盘,那就不用配置环境变量了,在我们环境变量中,已经默认有C盘下载的目录并指向那个文件夹下的bin,bin是什么?一般来说这个文件夹存放了大量的命令,比如你要执行git add . 命令,那你的终端是不是首先要认识git命令?因此才说要有环境变量,告诉你的电脑,git这个可执行命令存放在哪里,也就是配置环境变量的过程,比如你下载D盘的git目录,git底下就有一个用于存放命令的文件夹,那么你配置环境变量,地址指向这个文件夹,电脑就知道命令在哪里,也就认识这个命令了。
配置好环境变量后可以在 命令提示符 中执行 git -v 或 git --version 查看版本信息。
我们可以通过 git --help 或 git -h 来查看 git 帮助信息,比如
1 | sh复制代码C:\Users\Administrator>git -h |
2、SSH公钥
3.1、生成公钥
在 PowerShell 或 命令提示符 或 Git Bash 中执行以下命令即可生成公钥:
1 | sh复制代码ssh-keygen -t ed25519 -C "Gitee SSH Key" |
Windows 用户建议使用 Windows PowerShell 或者 Git Bash,
因为在 命令提示符 下无
cat和ls等命令。
详细步骤可以查看由 gitee 官网提供的帮助文档: 生成、添加 SSH 公钥
3.2、添加公钥
这里的添加公钥是在 gitee.com 添加我们刚刚生成的 公钥。
首先登录 Gitee 官网,
随后鼠标悬浮到右上角用户头像处,在下拉菜单中选择设置,
在新开启的页面左侧找到 安全设置 ,点击 SSH公钥 打开添加公钥页面。
详细步骤可以查看由 gitee 官网提供的帮助文档: 生成、添加 SSH 公钥
3.3、可信主机
将 gitee.com 添加到本地的可信主机列表中。
1 | sh复制代码ssh -T git@gitee.com |
在等待用户输入时,选择输入 yes 后再回车。
该步骤会在用户主目录下的 .ssh 目录中产生 known_hosts 文件。
3、远程仓库
在登录 Gitee 之后,
鼠标悬浮到右上角的 + 号图标,
点击新建仓库即可开始新建仓库操作。
4、本地仓库
我们可以通过两种方式创建本地仓库:
- 新建一个目录,并在其中执行
git init初始化该目录为一个本地仓库 - 通过克隆远程仓库得到一个本地仓库
因为在 第3部分 已经在 Gitee 创建一个远程仓库,所以我们可以将其克隆到本地。
1 | sh复制代码git clone git@gitee.com:malajava/spring-tutorial.git |
从远程仓库克隆成功后,在本地会生成一个 spring-tutorial 目录。
此时,我们就说这个 spring-tutorial 目录就是一个本地仓库,
在其内部一定包含一个 .git 目录,该目录就是本地仓库的所有配置。
5、代码管理
5.1、状态
首先进入到某个Git仓库内,比如 spring-tutorial 仓库中:
1 | cmd复制代码D:\ecuter\codes\spring-tutorial> |
通过 git status 来查看该仓库的状态:
1 | cmd复制代码D:\ecuter\codes\spring-tutorial>git status |
5.2、添加
将Git本地仓库中所有改动的文件添加到Git本地仓库的暂存区:
1 | cmd复制代码D:\ecuter\codes\spring-tutorial> git add . |
此处的 . 表示当前目录,而当前目录D:\ecuter\codes\spring-tutorial就是当前Git仓库spring-tutorial的根目录,所以该操作意味着将当前仓库下所有改动的文件添加到暂存区。
此处“改动的文件”包括:新增的文件、被修改的文件、被删除的文件
5.3、提交
将本地Git仓库中暂存区中的内容提交到本地Git仓库:
1 | sh复制代码git commit -m "注释" |
比如:
1 | cmd复制代码D:\ecuter\codes\spring-tutorial> git commit -m "新增了一个Java源文件" |
5.4、推送
可以通过 git push 命令将本地Git仓库中已经commit的操作推送到远程仓库:
1 | sh复制代码git push origin master |
当然你没有配钥匙的情况下,git可能不知道你要推到哪个仓库,因此你可以通过
1 | csharp复制代码git remote add origin 加上你的仓库地址 |
然后再去做推送操作
5.5、拉取
可以通过 git pull 命令从远程仓库抓取最新代码:
1 | sh复制代码git pull origin master |
6.版本回退
有的时候我们修改了文件,然后把修改好的文件提交到我们的仓库后add. -> commit ->push 后,也许我们会修改很多次这个文件,然后提交很多次,那么在仓库这个文件就会出现很多个版本,但是在我们实际工作时,不可能记得每一次我们做了什么修改因此,git作用就出现了。版本控制系统肯定有某个命令可以告诉我们历史记录,在Git中,我们用git log命令查看。如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数:,那么这些一大串的数字是什么呢?其实就是你的提交版本号,他不直接指明1234,但是每提交一个新版本,实际上Git就会把它们自动串成一条时间线。如果使用可视化工具查看Git历史,就可以更清楚地看到提交历史的时间线,为什么commit id需要用这么一大串数字表示呢?因为Git是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号,那肯定就冲突了。
回退
那么我们修改了这么多个版本,如果我们发现现在这个版本不行,还是想要上一个版本怎么办呢?
首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交1094adb...(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
现在,我们要把当前版本append GPL回退到上一个版本add distributed,就可以使用git reset命令:
1 | csharp复制代码$ git reset --hard HEAD^ |
欸?此时已经还原到了上一个版本,注意!!!如果这个时候你后悔了,你还是想要新版本,但是此时,你用git log看此时已经不存在最新的那个版本了,你想后悔怎么办?只要你还没有把当前窗口关闭,那就还有机会,你往回拉,查看那个版本的版本号,版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。
工作区、暂存区
工作区:就是你在电脑里能看到的目录,就你的本地仓库,那个文件夹。
版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。
管理修改
git 管理的是修改而不是文件,你在本地修改了一个文件,然后你add 然后你又对这个文件进行修改,你再commit,那么此时第二次的修改不会提交到master上,因为你的暂存区存的是你第一次修改的,而工作区放的是你第二次修改的,commit是把暂存区的内容推送
撤销修改
人都会犯错,我们如果不小心在文件中添加了一些不该添加的内容,此时我们通过git status可以发现有一个文件修改了,并且git会告诉你git checkout -- file可以丢弃工作区的修改命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
分支管理
分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。
现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。
首先,我们创建dev分支,然后切换到dev分支:
1 | css复制代码$ git checkout -b dev |
git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
1 | ruby复制代码$ git branch dev |
然后,用git branch命令查看当前分支:
1 | markdown复制代码$ git branch |
现在,我们把dev分支的工作成果合并到master分支上:
1 | scss复制代码$ git merge dev |
git merge命令用于合并指定分支到当前分支。合并后,再查看readme.txt的内容,就可以看到,和dev分支的最新提交是完全一样的。`
注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。合并完成后,就可以放心地删除dev分支了:
1 | ruby复制代码$ git branch -d dev |
git rebase
有没有懂的同学?怎么用?什么时候用?欢迎补充
本文转载自: 掘金