一、基本概念
学习git我们首先要明确三个概念:
工作区: 就是在你电脑本地的目录
暂存区: 存放在 .git文件夹下的 index文件中
版本库: 就是 .git 文件夹,这是一个隐藏的文件你要勾选才能看到
三者之间的关系图如下所示
二、常用命令
2.1 创建本地仓库
此处要用到的命令如下
cd d: (进入D盘)
mkdir test (创建test文件夹)
cd test (进入test文件夹)
git init (初始化仓库)
方法一:只使用命令行
操作流程如下:
- 打开git bash
- 执行以下命令就可以在D盘的test文件夹下创建一个仓库
方法二:简单操作
操作流程如下:
- 直接打开D盘手动新建一个test文件夹,然后进入test文件夹
- 在这里右键选择Git Bash Here打开git bash然后直接执行命令git init即可
2.2 提交文件到版本库中
此处要用到的命令如下
git add . ("."表示提交所有修改过的文件)
git add 文件名 (对指定文件进行提交,例如git add test1.txt)
git status (查看当前的状态)
git commit -m"描述信息" (提交修改并填写相关描述,描述不能为空)
操作流程如下:
- 我们在文件夹中创建一个用来提交的文件,这里我简单创建了一个文本文档test1.txt
- 右键选择Git Bash Here打开git bash,然后执行命令git add . 你也可以后面加上具体的文件名,就是单独对一个文件进行提交例如 git add test1.txt
这里的执行完add命令之后,还没有完成真正的提交只是把文件添加到暂存区中(简单来说就是添加到一个临时的提交任务目录) - 执行git status,查看当前的一些状态。可以看到它显示有改变需要提交,一个new file新的文件。
- 确认提交,执行命令 git commit -m"第一次提交" -m也就是message的意思执行完命令出现如下所示也就是提交成功了
- 检查状态,我们再次执行 git status可以看到现在变成了nothing to commit
2.3 分支管理
一般来说在开发过程中,master分支上是稳定的发布版本,每个人都要创建自己的dev分支,在自己的分支上进行开发,当自己的分支测试没有问题之后,再合并到一个公告的dev分支,最后将公共的dev分支合并到master分支上,也就完成了新项目的发布
2.3.1 查看所有分支
此处要用到的命令如下
git branch (列出所有的分支)
执行命令,可以看到当前是只有一个默认的master分支
2.3.2 创建一个新的分支
此处要用到的命令如下
git branch 分支名称 (如 git branch dev)
我们来创建一个新的分支dev,执行命令 git branch dev。然后我们再次执行git branch可以看到现在已经有了两个分支,高亮显示的为当前选中的分支。
2.3.3 分支切换
此处要用到的命令如下
git checkout 要切换到的分支名称 (如 git checkout dev)
git switch 要切换到的分支名称 (如 git switch dev)
我们将分支切换到 dev 执行命令 git checkout dev 或 git switch dev,然后我们再次执行 git branch 可以看到现在dev变成高亮显示,已经切换到了 dev 分支。
2.3.4 创建一个新的分支并且立刻切换到该分支
此处要用到的命令如下
个人觉得switch更好理解,推荐使用
git checkout -b 分支名称 (如 git checkout -b test)
git switch -c 分支名称 (如 git switch -c test)
我们分别创建两个新的分支 test 和 test2 ,执行命令 git checkout -b test 和 git switch -c test2,可以看到提示我们已经切换到了新的分支 test 和 test2,两种命令都是没有问题的。
2.3.5 删除分支
此处要用到的命令如下
git branch -d 分支名称 (如 git branch -d test)
注意: 我们不能删除当前所在的分支,例如我们当前处于test分支,如果这时我们删除test分支就会出现如下报错
所以我们需要先切换到其他分支,然后再进行test分支的删除就没有问题了,可以正常的进行删除,如下所示
2.3.6 分支合并及合并冲突解决
此处要用到的命令如下
git merge 要合并到当前分支的分支名称 (如 git merge dev)
注意: 该命令的作用是将指定的分支合并到当前所在的分支,也就是说如果我们想要将dev分支上的内容合并到master分支上,那么我们就需要先切换到master分支上然后再执行该命令才可以。
现在我们要将dev分支下所做的修改整合到 master分支上
操作流程如下:
- 切换到 master分支将 test1.txt中的内容修改如下,然后进行add、commit等操作进行提交。
- 切换到 dev分支下将 test1.txt中的内容修改如下,然后进行add、commit等操作进行提交。
- 切换回 master分支,然后执行命令 git merge dev,这时我们发现报错了,说 test1.txt 文件存在冲突自动合并失败了(这里是因为我们在dev分支中把之前的aaa删掉了所有才有了冲突),所以我们需要手动解决冲突。
- 打开 test1.txt 可以看到多了 <<<<<<< ======== >>>>>>>>>的分隔线,此时执行git status也可以看到现在是有问题的,所以我们要做的就是手动的去修改这个文本。
- 修改 test1.txt 文件为我们希望的样子
- 手动提交修改后的文件,并且再次查看git status 可以看到已经没问题了
我们再来说一下没有冲突是什么样子
如下截图是没有冲突时的结果,我就不做具体演示了。
简单说一下,这里我又建了一个新的分支newdev
操作流程如下:
- master分支上提交好文本test1.txt之后,切换到newdev分支。
- 然后再不对原有内容做修改的情况下直接在test1.txt上增加一行内容然后提交
- 切换回到master分支上进行合并操作
- test1.txt就会变成在newdev分支中看到的那样,不会出现上面提到的<<<< ==== >>>>三种分隔线。
2.3.7 抓取分支
此处要用到的命令如下
git pull origin master (将远程仓库的master分支抓取到本地仓库默认与当前本地所在分支进行合并)
git pull origin master:本地分支名 (将远程仓库的master分支与本地指定的分支进行合并,如git pull origin master:dev)
git pull origin 远程分支名:本地分支名 (将远程仓库指定的分支与本地指定的分支进行合并)
git pull 远程主机名 远程分支名:本地分支名 (远程主机名一般默认为origin,本地分支名如果不写的话就默认是当前所在分支)
情景模拟: 你正在和多人协同开发一个项目,这时有人向远程仓库中推送了一些公共的文件,你需要把这些文件获取下来,那么这时你就需要用到抓取分支。
注意: 拉取分支获取到的是远程仓库该分支上发生变化的内容,这个变化是跟你上一次拉取分支时做对比。也就是说早上九点的时候你抓取了一次分支,十点的时候其他人对上面的一个文件进行了修改,那么十一点时你再次去抓取分支时,获取的只是这一个被修改的文件。
2.3.8 推送分支
此处要用到的命令如下
git push 远程主机名 本地分支名:远程分支名(把指定的本地分支推到指定的远程主机远程分支上,远程分支可以直接写名称或者是 主机名/分支名例如origin/dev)
git push 远程主机名 远程分支名 (把本地分支推送与之对应的远程分支(通常两者同名),如果该远程分支不存在,则会被新建)
git push 远程主机名:远程分支名 (删除指定的远程分支,等同于推送一个空的本地分支到远程分支)
git push -u 远程主机名 本地分支名(指定默认推送规则,下次直接 git push 即可)
2.4 容错保护,修改恢复
此处要用到的命令如下
git checkout 文件名称/路径/.
(如 git checkout test1.txt ;
对所有的文件进行操作就使用 . ;
对于某一个目录下的所有文件就可以使用如 /src )
操作流程如下:
- 我们在文本中输入1111然后对他进行提交
- 提交之后我们再次对这个文本进行修改,我们增加一行2222
- 此时如果我们想要撤销这一次添加2222的修改,那么我们就可以执行命令
git checkout test1.txt,再次打开文本可以看到2222消失了,说明撤销成功
2.5 修改存档
此处要用到的命令如下
git stash (对当前没有完成的操作进行一个存档)
git stash pop (读取存档)
情景模拟: 当你在dev分支上进行开发时,这时你被要求去修改一个master分支上面的bug,所以你需要去创建一个临时的分支去修复它,但是你dev分支上的内容还没有做完,你也不想进行提交,那么这时你就需要存档功能了。
操作流程如下:
- 我们对 test1.txt进行一定的修改,然后执行 git status查看当前状态。可以看到一开始的状态是有文件修改但没有被提交。
- 执行 git stash之后可以看到状态变成了nothing to commit,分支变成干净的了,此时你就可以去合并分支了。
- 合并完之后你可以再切换回之前的分支,然后再通过git stash pop来读取存档。查看状态,可以看到再次显示了修改后未被提交的文件。
注意: 这里我没有进行合并分支操作,主要是演示这个存档功能的使用效果
2.6 本地仓库与远程仓库关联
此处要用到的命令如下
git remote add origin 远程仓库地址 (将本地仓库与远程仓库关联)
git push origin master (本地推送主分支)
情景模拟: 我们先在本地创建了一个git的仓库,然后我们想要将他推送到远程仓库中(如GitHub、码云、gitLab等)
操作流程如下:
- 这里我以码云为例,在码云上创建一个仓库,可以看到创建好之后下面也有入门教程告诉我们怎么进行仓库的关联
- 不管你是使用什么平台,主要就是找到远程仓库的地址就可以,在克隆下载的按钮处就可以找到。
- 本地执行命令git remote add origin 远程仓库地址,就关联好了
- 现在你就可以将本地的东西,推送到远程仓库了,这里我们将master分支进行推送。执行命令git push origin master,可以看到就推送成功了。
- 最后我们去码云中看一下是不是真的推送成功了,刷新码云仓库,可以看到我们本地的test1.txt已经出现在了远程仓库中,说明确实成功了。
2.7 推送分支时发生冲突
此处要用到的命令如下
git push origin master (推送主分支)
git pull origin master (抓取主分支)
情景模拟: 你正在和多人协同开发,此时其他人向远程仓库推送了自己的master分支,这时你如果也想推送自己的分支就会失败。此时你要将远程仓库更新后的master分支抓取下来(如果是抓取其他的分支,就将master修改为对应的分支名称即可),然后再推送自己的分支即可。
操作流程如下:
- 为了模拟其他人进行了推送的情况我们手动在码云上添加一个README.md文件
- 我们在本地对 test1.txt做一点内容的修改,然后重新提交。
- 尝试推送分支,可以看到现在报错了
- 我们需要抓取新的 master分支,执行命令 git pull origin master,然后我们发现本地文件夹中多了 README.md文件,说明抓取成功了。
- 现在我们再次进行推送,可以看到没有报错推送成功
2.8 克隆仓库
此处要用到的命令如下
git clone 远程仓库地址
git clone -b 分支名称 远程仓库地址 (克隆指定的远程分支)
git clone 远程仓库地址 指定目录 (将仓库克隆到指定的目录)
情景模拟: 你现在要接手一个新的项目,当前项目存放在远程仓库中,你需要先将项目下载下来,把远程仓库克隆到本地。
注意: 克隆的目录一定要是空的,SSH方式克隆要先对远程仓库配置公钥否则会无法克隆。
操作流程如下:
- 找到远程仓库地址选择HTTPS的地址或者是SSH的地址都可以
- 我们新建一个文件夹test2然后进入目录,右键打开git bash。执行命令
git clone 远程仓库地址 然后可以看到,它帮我新创建了一个git_test_warehouse的文件夹然后将内容克隆到了这个文件夹里。
- 我们试一下克隆到指定目录,我们设定目录为D盘下的test3,可以看到也没有任何问题。
2.9 查看远程分支信息
此处要用到的命令如下
git remote
git remote -v (查询结果更加详细)
2.10 查看日志
此处要用到的命令如下
git log
git log --oneline (查询结果比较简洁)
git log
git log --oneline
转载:https://blog.csdn.net/showadwalker/article/details/104678862