Git学习
1.简介
Git 是一个开源的分布式版本控制系统(Distributed Version Control System,简称 DVCS),用于敏捷高效地处理任何或小或大的项目。
2.工作流程图
使用的命令如下:
- clone(克隆): 从远程仓库中克隆代码到本地仓库。
- checkout (检出):从本地仓库中检出一个仓库分支然后进行修订。
- add(添加): 在提交前先将代码提交到暂存区。
- commit(提交): 提交到本地仓库。本地仓库中保存修改的各个历史版本。
- fetch (抓取) : 从远程库,抓取到本地仓库,不进行任何的合并动作,一般操作比较少。
- pull (拉取) : 从远程库拉到本地库,自动进行合并(merge),然后放到到工作区,相当于fetch+merge。
- push(推送) : 修改完成后,需要和团队成员共享代码时,将代码推送到远程仓库。
3.安装
下载地址: https://git-scm.com/download
下载完成可以得到如下安装文件:
双击打开按步骤安装即可。安装完成后在电脑桌面(也可以是其他目录)点击右键,如果能够看到下面两个菜单则说明Git安装成功。
Git GUI:Git提供的图形界面工具
Git Bash:Git提供的命令行工具
3.1 常用指令
在Git Bash中,我们会用到一些基本的linux命令:
- ls:查看当前目录
- cat:查看文件内容
- touch:创建文件
- vi/vim file:编辑文件
4.环境配置
4.1 查看配置
//查看所有配置
git config -l
//查看系统配置
git config --system --list
//查看用户自己配置
git config --global --list
系统文件配置文件位置如下(因为之前我改过路径,这里的http.sslCAInfo是不对的,改为D:/Download/Git/mingw64/ssl/certs/ca-bundle.crt
)
4.2 配置用户名(必须)和邮箱
//配置用户名
git config --global user.name "Kint"
//配置邮箱
git config --global user.email "1114011612@qq.com"
用户配置文件位置如下:
5.创建仓库
创建仓库的步骤如下:
- 新创建一个空文件夹(例如
test
),作为本地的Git仓库 - 进入该文件夹,右键打开Git Bash窗口
- 执行指令
git init
- 如果创建成功后可在文件夹下看到隐藏的
.git
目录(Windows下勾选显示隐藏的项目即可看到)
6.基础操作指令
Git工作目录下对于文件的修改(增加、删除、更新)会存在几个状态,这些修改的状态会随着我们执行Git的命令而发生变化。
6.1 查看状态(status)
- 作用:查看的修改的状态(暂存区、工作区)
- 指令:git status
这里新创建了一个file01.txt
的文件,使用指令git status
查看,现在file01.txt
是未跟踪的文件,提示我们可以用指令git add
跟踪该文件,即将文件放入暂存区。
6.2 添加工作区到暂存区(add)
- 作用:添加工作区一个或多个文件的修改到暂存区
- 指令:git add 单个文件名|通配符(一般常用指令
git add .
,将所有的改动加入暂存区)
现在我们用git add .
指令将file01.txt
文件放入暂存区,现在可以看到文件是即将提交的状态,即将存入我们创建好的仓库中。
6.3 提交暂存区到本地仓库(commit)
- 作用:提交暂存区内容到本地仓库的当前分支
- 指令:git commit -m ‘注释内容’
使用指令git commit -m 'add file01'
将文件存入仓库中。
6.4 查看提交日志(log)
- 作用:查看提交记录
- 指令:git log [options]
- options参数:
- –all:显示所有分支
- –oneline:将提交信息显示为一行
- –abbrev-commit:使得输出的commitId更简短
- –graph:以图的形式显示,查看历史中什么时候出现了分支、合并
- options参数:
查看我们的操作记录,git log --graph
在每条记录前面有*
符号,当操作记录和分支数量很多的时候,该指令可以让操作者更直观看到仓库的变化。
6.5 版本回退(reset)
- 作用:版本切换
- 指令:git reset --hard commitID(commitID 可以使用
git log
指令查看)
现在我们新创建文件file02.txt
,并提交到我们的仓库中,此时我们的仓库中存在file01.txt
和file02.txt
两个文件。可以看到这时我们有两条提交记录,前面就是提交的编号,我们可以根据这个编号回退到我们之前的版本。比如这里我们想回到只有file01.txt
文件的版本。
我们输入git reset --hard 86d8f8e
指令,此时我们就只有add file01
的提交记录,没有add file02
的提交记录,仓库中也没有file02.txt
,说明我们成功回到了只有file01.txt
的版本。
如果这时候我们想回到add file02
的版本,但是我们记不住提交编号,我们可以通过git reflog
指令查看所有的提交记录。
找到提交编号后,我们就可以回滚到有file01.txt
和file02.txt
版本的仓库。
6.6 删除文件(rm)
- git rm -f file:将文件从暂存区和工作区中删除
- git rm --cached file:把文件从暂存区域移除,但仍然保留在当前工作区中
如果只是新创建test.txt
文件而没有提交至暂存区,git rm test.txt
指令不生效。
文件提交至暂存区后,git rm test.txt
指令仍不生效,但此时我们可以根据提示修改指令,-f
即强制删除暂存区和工作区的文件,--cached
则是删除在暂存区的文件而保留工作区的文件。
7.分支
几乎每一种版本控制系统都以某种形式支持分支。使用分支意味着你可以把你的工作从开发主线上分离开来进行重大的Bug修改、开发新的功能,以免影响开发主线。
7.1 查看分支
- git branch
目前我们只有一个master分支。
7.2 创建分支
- git branch 分支名
创建新分支dev01
。
7.3 切换分支
- git checkout 分支名
- git checkout -b 分支名(创建并切换分支)
成功切换至dev01
分支。
7.4 合并分支
- git merge 合并分支名
我们在dev01
分支上创建了file03.txt
,并提交至仓库中。此时master
分支仓库中没有file03.txt
。我们的目的是想要master
分支中也有file03.txt
。
我们先切换到master
分支,执行git merge dev01
指令就可以合并两个分支。
7.5 删除分支
- git branch -d 分支名(删除分支时,需要检查)
- git branch -D 分支名(不做检查,强制删除)
合并完成后,我们将dev01
分支删除,此时就只剩下了master
分支。
8.解决冲突
当两个分支上对文件的修改可能会存在冲突,例如同时修改了同一个文件的同一行,这时就需要手动解决冲突,解决冲突步骤如下:
- 处理文件中冲突的地方
- 将解决完冲突的文件加入暂存区(add)
- 提交到仓库(commit)
比如此时master
分支有3个文件,我们先创建并切换至dev01
分支。
在dev01
分支中,我们修改file01.txt
的内容,让count=1。(用vim
编辑文本时,先按i
键进入编辑模式,修改完成后按Esc
和:
,最后输入wq
指令保存退出)
然后将修改后的文件上传至仓库中。
切换回master
分支,修改file01.txt
的内容,让count=2,然后上传至对应仓库中。
当我们尝试合并两个分支时,会提示我们产生了冲突。查看file01.txt
内容,其中count=2
是master
分支修改的内容,count=1
是dev01
分支修改的内容,我们需要手动处理产生冲突的地方。
我们可以修改成想要的效果,在这里我设置count=3。
成功解决冲突,最后提交文件至仓库,就可以完成合并分支的操作。
9.远程仓库Github
9.1 注册Github
地址:https://github.com/
9.2 创建远程仓库
仓库创建完成后可以看到仓库地址,如下图所示:
9.3 配置SSH公钥
- 生成SSH公钥:ssh-keygen -t rsa -C “登陆GitHub的邮箱”(不断回车,如果公钥已经存在,则自动覆盖)
- 获取公钥:cat ~/.ssh/id_rsa.pub
- 在Github上设置SSH
设置成功如下:
- 验证是否配置成功:ssh -T git@github.com
9.4 操作远程仓库
9.4.1 添加远程仓库
此操作是先初始化本地库,然后与已创建的远程库进行对接。
- 命令:git remote add <远端名称> <仓库路径>
- 远端名称,默认是origin,取决于远端服务器设置
- 仓库路径,从远端服务器获取此URL(选择SSH)
- 例如: git remote add origin git@github.com:LenkyAndrews/git_test.git
9.4.2 查看远程仓库
- 命令:git remote
9.4.3 推送到远程仓库
- 命令:git push [远端名称] [本地分支名]
- 例如:git push origin master
将本地的master分支仓库上传至远程仓库中。
查询远程仓库可以看到对应的文件。
9.5 从远程仓库克隆
如果已经有一个远端仓库,我们可以直接clone到本地。
- 命令:git clone <仓库路径>
例如,我们新创建一个clone的文件夹,在里面右键打开Git Bash,输入指令git clone git@github.com:LenkyAndrews/git_test.git
可以看到,已经成功将远端仓库的文件克隆到本地。
9.6 从远程仓库中抓取和拉取
9.6.1 抓取
命令:git fetch [远端名称] [分支名称]
抓取指令就是将仓库里的更新都抓取到本地,不进行合并。比如操作者A新创建文件file04.txt
,然后提交到远程仓库中。
然后操作者B本地的仓库没有更新,此时他要抓取远端仓库的更新到本地。抓取后查看记录此时本地仓库并没有file04.txt
文件,故要进行合并分支操作。
通过git status
指令可以查看当前的状态,合并分支后可以看到本地仓库中已有file04.txt
文件。
9.6.2 拉取
命令:git pull [远端名称] [分支名称]
将远端仓库的修改拉到本地并自动进行合并,等同于fetch+merge。
比如操作者A又添加了file05.txt
文件到远端仓库中。
操作者B想要更新本地仓库,直接使用pull
指令即可完成更新。
遇到的问题:右键无法打开Bit Bash
问题:右键无法打开Bit Bash,显示找不到应用程序。
解决办法:
- win+r 快捷键打开运行,输入regedit,打开注册表。
- 在HKEY_CLASSES_ROOT\Directory\Background\shell这个目录下找到git_gui和git_shell两个文件夹,git_gui对应的就是右键菜单中的“Git GUI here" ,git_shell对应右键菜单中的"Git Bash here"。
-
点击文件夹,在右侧可以看到当前路径有误,需要修改。
-
双击Icon,修改路径,这里我是删除一个
Git/
- 点击command文件夹,双击右侧的默认,修改路径。
- 修改完毕后关闭注册表。
现在右键可以正常打开Git了。