You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

180 lines
7.4 KiB

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#### git的学习使用
##### (一)基本操作:
![image-20240422211553139](https://telegraph-image-5jy.pages.dev/file/f231e32e0e1be20b81df9.png)
1. 安装配置好git
2. 创建目录 init 初始化一个仓库,初始化完成后会出现一个.git文件夹。
3. git status 查看仓库的状态。它会显示所处的分支以及可以提交的内容。包括工作区文件以及缓冲区文件。
4. git add -- 向缓冲区提交文件。
1先创建一个文件然后add一下这里可能会出现一个警告。
![image-20240425222004764](https://telegraph-image-5jy.pages.dev/file/35df80aee19f29fa353e6.png)
这里我们了解一下LF以及CRLF:
> CR是换行符“\r”LF是回车符“\n”windows用CRLF“\r\n“来结束这一行而linux用”\n"来结束这一行。
>
> windows编译器会把行尾转换成“\r\n”
>
> 解决方案git config --global core.autocrlf input 它会在提交时把换行转化为LF拉回本地时在转化为对应系统的换行方式。
2git add也被称为跟踪文件可以用git add .来一次性添加所有的文件("."与add之间要有空格
5. git commmit -- 进行文件的提交(先跟踪后才可以提交)
1直接使用该命令在vim界面中写最后用一个空行留白。这里可以直接写多行提交。
2用git -m "message"进行提交,如果是多行
```
git commit -m "fix:bi标题
1、你好
2、世界"
```
也可以用多个-m
3git commit --amend 修改信息,加上-m 可以不打开vim终端直接进行更改。
![](https://telegraph-image-5jy.pages.dev/file/f6c6c71ec29eb73c2c43a.png)
6. git log 查看提交日志
![image-20240426152334634](https://telegraph-image-5jy.pages.dev/file/b857c324c0384bba4cfa0.png)
git log --graph 可以用图表的形式查看分支
7. git diff -- 查看更改add前后的区别
- 文件被增添的部分用绿色字符,加号来标识;文件被删减的部分用红色字符减号来标识。
- 注意只有文件被add到缓冲区之后才能跟工作区进行比较。
- 可以在后面加文件名来指定查看区别,如果不加,默认输出全部的被修改的文件。
##### (二)分支的操作
> 不同的分支可以同时进行完全不同的任务等到完成后再与master合并分支可以使得团队高效的进行并行开发。
![image-20240426154804775](https://telegraph-image-5jy.pages.dev/file/6a5e24362a8165dc67e42.png)
1. git branch
- git branch + 分支名 创建分支。
- git branch 查看本地分支
- git branch -r 查看远程分支
- git branch -a 查看本地和远程分支
- git branch -d 分支名 删除本地的分支
- git push origin --delete 远程分支名 删除远程对应的分支
- git branch -vv 查看本地和远程分支的关系
2. git checkout
1git checkout 分支名 切换到相应的分支
2git checkout -b 分支名 创建并切换到该分支
3git checkout - 切换回上一个分支。
3. 特性分支
通常master(main)分支作为主分支存放已经开发好的代码在master的基础上创建其他特性分支里面是创建中的代码。
4. git merge --合并分支
1git merge 的指令有三种,--ff --no-ff,--ff-only
2-ff代表可以快速合并fast-forward采用快速合并的方式不能快速合并时采用--no-ff(non-fast-forward),即非快速合并。--ff-only代表只能使用快速合并如果无法快速合并就会拒绝该请求。
- 注意:只有被跟踪,提交后的库发生合并时才会提示记录。需要先将新的分支跟踪,然后再合并;如果是快速合并不会有记录,只有选择--no-ff时真正发生结点的合并才会提示写记录。
![image-20240427110248207](https://telegraph-image-5jy.pages.dev/file/74071ce6acf07a01ed485.png)
- 用git log --graph可以更鲜明的看出合并的方式。
![image-20240427110500682](https://telegraph-image-5jy.pages.dev/file/f685c6cc5587f49927c51.png)
将mater合并到test的最简单流程
```
git checkout test
git merge master
不可简化为一句话git merge master test经测试会提示已执行但是不会真正执行
```
![image-20240427123247023](https://telegraph-image-5jy.pages.dev/file/49604771c66f9dcae733d.png)
> 关于fast -forward 与non-fast-forward的区别
下图便是一次fast forward的流程它本质上是直接移动了指针。
![流程](https://telegraph-image-5jy.pages.dev/file/dcac780cc9e17f2f75a41.png)
而non-fast-forward会创建出一个新的结点合并差异后将其置于头部再把master对应过去。
5. git rm 的使用
1rm只删除工作区的文件如果需要删除版本库文件还需要再追踪。不推荐使用
如图是一次删除3.md文件的过程
![image-20240427121725488](https://telegraph-image-5jy.pages.dev/file/64005d7bb09a42b50b8f8.png)
2git rm删除工作区和缓存区的文件还需要commit才能删除版本库。如果工作区文件与版本库文件不同需要加参数-f。
6. 使用git reset回退版本
1先用git log 查询删除前的hash值
![image-20240427121929088](https://telegraph-image-5jy.pages.dev/file/36b90458612bf4de1d77a.png)
2利用该值进行回退![image-20240427122014829](https://telegraph-image-5jy.pages.dev/file/f284bc53d47d4017d7b44.png)
3查看状态用git restore 恢复文件
![image-20240427122108249](https://telegraph-image-5jy.pages.dev/file/f0aa0f4f729c60a40b0cd.png)
由于git log 只能查看以当前状态为终点的历史所以可以用git reflog查看仓库的操作日志。
##### (三)推送至远程仓库
1. 用git remote add 添加远程仓库
```
git remote add origin git@github.com:xyyr-c/hello--world.git
```
这里我们用origin作为远程仓库的标识符名称
2. git push 推送到远程仓库
1git push -u origin master 将本地的master推送至远程的master分支并且建立关联关联后直接git push 就会默认选择master。
2-f 指令是强制覆盖不要轻易使用这里是由于原本的库里有README与本地产生冲突所以先强制覆盖了。
![image-20240427140231195](https://telegraph-image-5jy.pages.dev/file/10c12f7d27de08e730b76.png)
3. git clone 直接获取远程的仓库,克隆出一个以仓库名作为名字的文件夹,以及相应的文件。
4. git pull 获取远程的仓库分支
本地修改,然后推送至远端的一次过程。
```
在test分支
git pull origin master //拉取主分支
vim README.md//修改文件
git add . //追踪文件
git commit -m "change README"//提交到版本库
git checkout master //切换回master分支
git merge test //合并分支
git push//推送到远程仓库
```
如果出现下面这个图片,说明推送成功:
![image-20240427142106042](https://telegraph-image-5jy.pages.dev/file/219589a7737b91b8275c4.png)
如果出现这个,不会发生文件的变化,一定有地方错了(比如忘记提交到版本库)
![image-20240427142157444](https://telegraph-image-5jy.pages.dev/file/96ec503cca5adf3bf977e.png)