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
有没有懂的同学?怎么用?什么时候用?欢迎补充
本文转载自: 掘金