Git基础使用
- 基础配置
- 工作区-暂存区-版本库
- 添加文件
- 修改文件
- 版本回退
- 撤销修改
- 删除文件
- 分支管理
- 强制删除分支
基础配置
初始化仓库:
git init
# 此时就会生成一个 .git 的文件夹,切勿修改或删除文件夹里的内容
配置仓库——名字:
git config user.name "你的名字"
配置仓库——邮箱:
git config user.email "你的邮箱"
查看仓库配置:
git config -l
删除仓库配置——名字(邮箱同理):
git config --unset user.name
当前机器下所有仓库配置:
git config --global user.name "你的名字"
重置 name 就需要使用:git config --global --unset user.name
工作区-暂存区-版本库
工作区:工作区就是本地电脑存放文件或代码的目录。
暂存区:一般存放在 .git 目录下的 index 文件中(.git/index),暂存区也叫索引。
版本库:也叫仓库,就是工作区中的一个隐藏目录 .git,版本库里的所有文件都可以被 Git 所管理。
工作区中的文件 add 到暂存区后,暂存区再 commit 到仓库中,此时才会被写到版本库中。
通过新建或粘贴进目录的文件,并不能叫做向仓库中新增文件,而只是在工作区新增了文件。需要使用 git add 和 git commit 命令才能将文件添加到仓库中进行管理。
添加文件
提交ReadMe
git add ReadMe
git commit -m "测试Git提交"
# -m 后面跟上本次提交的细节等信息,等后面查看时就可以快速得知本次提交时做了些什么修改。
git add .
# . 表示将当前目录下所有改动都放到暂存区中
提交后就会如下图所示:1文件提交,1行插入。
#上面是添加一个文件,可以一次性添加多个文件
git add text1 text2 text3
# 然后再使用
git commit -m "添加三个文件"
通过 git log 就可以查看提交的信息:
也可以使用 git log --pretty=oneline 输出简短信息
修改文件
当我们在文件里修改了内容后,使用 git status 命令就可以查看上一次提交后到现在是否对文件的修改:
上图可以看到文件 ReadMe 被修改。
使用命令 git diff [file] 命令用来显示暂存区和工作区文件的差异:
版本回退
在文件 ReadMe 中,第一次内容为 hello git,然后提交了,此时为第一个版本。二次编辑新增了 hello world,提交后为第二个版本。
使用命令 git reset 可用于版本回退,可以指定退回某一次提交的版本。此命令回退本质是将版本库中的内容进行回退,工作区或暂存区是否回退由参数决定:
git reset 格式:git reset [--soft | --mixed | --hard] [HEAD]
其中(表格中的参数前面为两个-):
工作区文件内容 | 暂存区文件内容 | 版本库文件内容 | git reset 参数 |
---|---|---|---|
hello git hello world | hello git hello world | hello git hello world | |
hello git hello world | hello git hello world | hello git | –soft 只有版本库会回退 |
hello git hello world | hello git | hello git | –mixed(默认选项) 版本库和暂存区会回退 |
hello git | hello git | hello git | –hard 都回退 |
参数 --hard要慎用,因为当在工作区文件中编写代码后,若没有保存提交,当使用参数 --hard回退后,那编写的代码就白写了。
若又不想回退了,还是使用同样的命令回退,只需修改版本号:
当命令行内容被清除后,使用 git log 查看只有一条记录时,可以使用 git reflog 命令来查看其余提交记录。
撤销修改
在工作区写了很多内容,bug 越来越多,想恢复到上一个版本重新进行开发。
工作区文件内容 | 暂存区文件内容 | 版本库文件内容 | 解决方式 |
---|---|---|---|
hello git 新内容 | 未add | 场景:此时只有工作区需要回退 1.手动撤销—不推荐、易出错 2. git checkout – filename(两个-) | |
hello git 新内容 | hello git 新内容 | 未commit | 场景:工作区和暂存区都需回退 git reset --hard HEAD HEAD为当前版本,也就是回退到最近一次提交时。 HEAD^为上一个版本、HEAD^^为上上个版本,以此类推 |
hello git 新内容 | hello git 新内容 | hello git 新内容 | 场景:都需回退、版本库中的为最新版本 不包含新内容的则为上一版本,回到上一版本即可 git reset --hard HEAD^ |
删除文件
删除文件也是修改操作
删除工作区和暂存区:git rm file5
然后commit: git commit -m "delete file5"
分支管理
查看当前本地仓库有哪些分支:
git branch
创建 dev分支:
git branch dev
切换到 dev分支:
git checkout dev
# 可以使用下面的命令来同时完成创建并切换分支:
git checkout -b dev1
切换到 dev分支后,进行代码编写、add、commit 后,dev 分支上就存储了新的代码,但在主分支上并没有新代码,若要让主分支也有新代码,可以进行分支合并:
#切换到 master 上进行合并
git checkout master
#合并分支
git merge
#合并后 master 就能看到 dev 分⽀提交的内容了
删除分支:
#删除 dev分支
git branch -d dev
删除分支需要在其他分支上,不能在 dev分支上删除 dev分支
合并冲突: 假设在 dev分支上对文件修改了内容(将最后一行内容修改为 dev),然后又在 master分支上对同一个文件修改了内容(将最后一行内容修改为 master),此时若合并分支就会冲突,git 不知道将文件最后一行内容保存为 dev 还是 master,此时就需要手动调整冲突代码。
处理冲突:
使用命令 git log --graph --pretty=oneline --abbrev-commit 可以查看合并情况:
分支的作用:
强制删除分支
在分支还没有合并前,使用 git branch -d 分支名,是无法删除分支的(因为没有合并,受Git保护),若确实需要删除(不需要开发此功能了),则需切换到其他分支,使用 git branch -D 分支名 来删除。