这两天在学习git版本控制工具,在这里记录一下。git的安装就不提了,可以去官网下载:https://git-scm.com/。
一、git工作原理
- git在本地分为三个区本地库、暂存区和工作区。
- 工作区的代码要提交首先需要使用git add命令添加到暂存区,然后使用git commit命令提交到本地库。
- 暂存区的作用主要是临时存储,用于版本控制,所以提交前添加到暂存区非常重要。
- 可以直接git commit提交,但是提交后版本无法恢复。
本地仓库与远程仓库的关系如上。
- 本地库2想要获取远程仓库的代码,可以使用git clone命令覆盖到本地。
- 本地库2修改完代码后想要同步到远程仓库,使用git push命令,需要加入团队。
- 本地库1使用git pull命令拉取远程仓库代码合并到本地仓库,修改完成后git push推送到远程仓库合并。
了解到这些之后就可以试着练练手了。
二、Git的相关命令
首先切换到项目文件夹下,右键打开git命令窗口。
1、设置签名
在使用git之前需要先设置一下签名,签名其实就是为了区分是谁操作的一个标识。包括用户和邮箱。
签名分为两个级别:项目级别和系统用户级别。
- 项目级别:只对当前项目生效
- 系统用户级别:相当于全局,只要不切换系统用户一直生效。
- 优先级:项目级别>系统用户级别
- 二者必须设置其一,否则git无法区分是谁进行的操作,也就无法进行版本控制。
# 项目级别
git config user.name zhangsan
git config user.email 1593324992@qq.com
# 系统用户级别
git config --global user.name zhangsan
git config --global user.email 1593324992@qq.com
其中项目级别配置完后保存在项目下 .git/config文件中。
系统用户级别配置保存在用户目录下的.gitconfig文件中。
cat命令用于打印文件内容
~代表用户根目录,也就是通常说的c:/user/administrator/
签名配置好以后就可以开始进行git的相关操作了。
2、初始化本地仓库
git init
命令执行后会生成.git文件夹,这里面包含一系列本地仓库相关的文件,不要删除或修改。
3、查看状态命令
git status
第二行表示工作区,当前没有文件可以提交;第三行表示暂存区没有文件可提交。
4、工作区添加到暂存区
创建文件随便写点东西,然后使用git status命令查看状态。
echo -e 'gaahaha\n gahhopkmm\n' >> test.txt
git status
发现工作区有一个标红的文件可提交,提示我们使用git add 命令。
echo命令是打印字符,这里的意思是追加 gaahaha\n gahhopkmm\n 到test.txt文件中。>>表追加,>表覆盖,参数-e表示解释转义字符。
使用git add命令添加,然后使用git status查看状态。
git add test.txt
git status
这时候发现工作区已经没有文件可以提交了,暂存区多了一个绿色的文件是我们刚提交上来的。而且提示我们如果想要恢复之前的状态可以使用git rm --cached命令。
5、暂存区提交到本地仓库
使用git add添加到暂存区后紧接着就可以使用git commit命令提交到本地仓库了。
git commit test.txt
上面的命令执行后会出现这样一个界面,这是vim编辑器,提交命令执行后会默认打开vim编辑器,这是在安装git的时候选择的,你可能没注意,但确实有这样一步。
如果你不想打开这个编辑器这样来使用:
git commit -m "commit message" [file name]
这里要求提交的时候添加一些备注,如果每一次提交都没有备注的话,可以想象多难找,所以git要求必须添加备注,否则添加失败,如图,提交被终止:
重新执行git commit命令,按下 i 进入编辑模式,编辑完成后按Esc退出到命令模式,然后按:编辑命令,输入wq保存并退出,回车键出现下图即提交成功。
可以对应来看一下,大概就是说,根提交也就是第一个版本,版本号77ee20b开头,备注this is my first commit,改变1个文件,3行内容。第一行的警告也是安装的时候有一个选项,提交的时候会将换行结尾符从windows的LF格式转换成CRLF格式,但本地不会变,不会影响自己的操作。
执行git status命令查看状态,没有需要提交的内容。
这就是一次完整的从工作区提交到本地库的过程。
6、查看日志命令
每一次提交过后都会生成一个历史版本,对应着有相应的日志进行记录。查看日志使用这个命令:
git log
为了方便演示我又修改提交了一次,这个命令查看log会生成很详细的信息如上图,其中带有(HEAD -> master)的就是当前的版本,commit后的一长串就是版本号,如果需要回退到某个版本时会用到。
当版本过多时,这样的显示就显得太多了,而且一页显示不下几个版本的信息,这个时候可以加上参数–pretty=oneline。这种方式只显示历史版本。
git log --pretty=oneline
这个命令只会显示版本号和提交信息,有时候查找起来会更加的方便。什么?命令太长了,那就换种写法。
git log --oneline
这样的写法只会显示版本号的前7位和备注信息,事实上,版本控制也只需要前七位就可以了。这种方式也只显示历史版本。
还有一种写法用于显示版本距离。
git reflog
这种方式和–oneline的方式相比就对了一个版本距离的问题,其中HEAD@{}就是版本距离,就是指距离当前版本的版本个数。这种方式会显示所有的版本,包括当前版本之前的版本。
7、版本回退
当我们需要回退版本的时候可以使用git reset命令。
# 通过版本号回退,可以跳到任意版本
git reset --hard 版本号
# 使用HEAD指针回退,只能退到之前的版本,历史版本,一个^代表一个版本
git reset --hard HEAD^...
# 回退N个版本
git reset --hard HEAD~[N]
除了–hard参数,还有–soft和–mixed参数。
–soft:仅在本地库移动指针,暂存区被凸显出来。
–mixed:移动本地库和暂存区的指针,工作区被凸显出来。
–hard:三个区保持同步移动。
8、比较文件命令
# 比较工作区和暂存区的文件
git diff [文件名]
# 比较某个历史版本和本地库的文件
git diff [版本号] [文件名]
# 不带文件名比较所有文件
git diff
git diff [版本号]
9、分支管理
为什么要分支?
同时并行推进多个功能开发,提高开发效率。
试错,如果开发失败,不会退其他分支造成影响,删除分支重新开始即可。
分支命令
# 创建分支
git branch [分支名]
# 查看分支
git branch -v
# 切换分支
git checkout [分支名]
# 合并分支,将某分支合并到当前分支
git merge [分支名]
当执行merge命令时可能会遇到冲突,例如合并的两个分支修改了同一文件的同一行,git无法自动取舍,会将冲突的区域都加入到文件中做上标记并提示,如下图:
打开文件如下:
git帮我们标记出了冲突的位置,我们需要人为的进行取舍。修改完文件后执行git status查看状态。
提示我们有冲突需要解决,使用git add命令,那我们就执行git add命令,再次执行git status查看状态。
提示冲突已经被修复啦,但仍然在合并中,提示我们用git commit命令结束合并。这里要注意,不能添加文件名,否则会报错。
执行命令git commit 后冲突解决。
以上就是我今天所学的所有内容啦,后面会继续学习跟github相关的操作。推荐大家去B站听尚硅谷的课程,讲的每一门技术都特别细致,让人印象特别深刻。大家加油!!!