|
|
|
@ -0,0 +1,180 @@
|
|
|
|
|
#### git的学习使用
|
|
|
|
|
|
|
|
|
|
##### (一)基本操作:
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
1. 安装配置好git
|
|
|
|
|
|
|
|
|
|
2. 创建目录 init 初始化一个仓库,初始化完成后会出现一个.git文件夹。
|
|
|
|
|
|
|
|
|
|
3. git status 查看仓库的状态。它会显示所处的分支以及可以提交的内容。包括工作区文件以及缓冲区文件。
|
|
|
|
|
|
|
|
|
|
4. git add -- 向缓冲区提交文件。
|
|
|
|
|
|
|
|
|
|
(1)先创建一个文件,然后add一下,这里可能会出现一个警告。
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
这里我们了解一下LF,以及CRLF:
|
|
|
|
|
|
|
|
|
|
> CR是换行符“\r”,LF是回车符“\n”,windows用CRLF“\r\n“来结束这一行,而linux用”\n"来结束这一行。
|
|
|
|
|
>
|
|
|
|
|
> windows编译器会把行尾转换成“\r\n”
|
|
|
|
|
>
|
|
|
|
|
> 解决方案:git config --global core.autocrlf input 它会在提交时把换行转化为LF,拉回本地时在转化为对应系统的换行方式。
|
|
|
|
|
|
|
|
|
|
(2)git add也被称为跟踪文件,可以用git add .来一次性添加所有的文件("."与add之间要有空格)
|
|
|
|
|
|
|
|
|
|
5. git commmit -- 进行文件的提交(先跟踪后才可以提交)
|
|
|
|
|
|
|
|
|
|
(1)直接使用该命令在vim界面中写,最后用一个空行留白。这里可以直接写多行提交。
|
|
|
|
|
|
|
|
|
|
(2)用git -m "message"进行提交,如果是多行
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
git commit -m "fix:bi标题
|
|
|
|
|
1、你好
|
|
|
|
|
2、世界"
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
也可以用多个-m
|
|
|
|
|
|
|
|
|
|
(3)git commit --amend 修改信息,加上-m 可以不打开vim终端直接进行更改。
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
6. git log 查看提交日志
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
git log --graph 可以用图表的形式查看分支
|
|
|
|
|
|
|
|
|
|
7. git diff -- 查看更改add前后的区别
|
|
|
|
|
|
|
|
|
|
- 文件被增添的部分用绿色字符,加号来标识;文件被删减的部分用红色字符减号来标识。
|
|
|
|
|
- 注意:只有文件被add到缓冲区之后,才能跟工作区进行比较。
|
|
|
|
|
- 可以在后面加文件名来指定查看区别,如果不加,默认输出全部的被修改的文件。
|
|
|
|
|
|
|
|
|
|
##### (二)分支的操作
|
|
|
|
|
|
|
|
|
|
> 不同的分支可以同时进行完全不同的任务,等到完成后再与master合并,分支可以使得团队高效的进行并行开发。
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
(1)git checkout 分支名 切换到相应的分支
|
|
|
|
|
|
|
|
|
|
(2)git checkout -b 分支名 创建并切换到该分支
|
|
|
|
|
|
|
|
|
|
(3)git checkout - 切换回上一个分支。
|
|
|
|
|
|
|
|
|
|
3. 特性分支
|
|
|
|
|
|
|
|
|
|
通常master(main)分支作为主分支,存放已经开发好的代码,在master的基础上创建其他特性分支,里面是创建中的代码。
|
|
|
|
|
|
|
|
|
|
4. git merge --合并分支
|
|
|
|
|
|
|
|
|
|
(1)git merge 的指令有三种,--ff ,--no-ff,--ff-only
|
|
|
|
|
|
|
|
|
|
(2)-ff代表可以快速合并(fast-forward)时,采用快速合并的方式;不能快速合并时,采用--no-ff(non-fast-forward),即非快速合并。--ff-only代表只能使用快速合并,如果无法快速合并,就会拒绝该请求。
|
|
|
|
|
|
|
|
|
|
- 注意:只有被跟踪,提交后的库发生合并时才会提示记录。需要先将新的分支跟踪,然后再合并;如果是快速合并不会有记录,只有选择--no-ff时,真正发生结点的合并,才会提示写记录。
|
|
|
|
|

|
|
|
|
|
- 用git log --graph可以更鲜明的看出合并的方式。
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
将mater合并到test的最简单流程:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
git checkout test
|
|
|
|
|
git merge master
|
|
|
|
|
不可简化为一句话:git merge master test(经测试,会提示已执行,但是不会真正执行)
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
> 关于fast -forward 与non-fast-forward的区别
|
|
|
|
|
|
|
|
|
|
下图便是一次fast forward的流程,它本质上是直接移动了指针。
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
而non-fast-forward会创建出一个新的结点,合并差异后,将其置于头部,再把master对应过去。
|
|
|
|
|
|
|
|
|
|
5. git rm 的使用
|
|
|
|
|
|
|
|
|
|
(1)rm:只删除工作区的文件,如果需要删除版本库文件,还需要再追踪。(不推荐使用)
|
|
|
|
|
|
|
|
|
|
如图是一次删除3.md文件的过程:
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
(2)git rm:删除工作区和缓存区的文件,还需要commit才能删除版本库。如果工作区文件与版本库文件不同,需要加参数-f。
|
|
|
|
|
|
|
|
|
|
6. 使用git reset回退版本
|
|
|
|
|
|
|
|
|
|
(1)先用git log 查询删除前的hash值
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
(2)利用该值进行回退
|
|
|
|
|
|
|
|
|
|
(3)查看状态,用git restore 恢复文件
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
注:由于git log 只能查看以当前状态为终点的历史,所以可以用git reflog查看仓库的操作日志。
|
|
|
|
|
##### (三)推送至远程仓库
|
|
|
|
|
|
|
|
|
|
1. 用git remote add 添加远程仓库
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
git remote add origin git@github.com:xyyr-c/hello--world.git
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
这里我们用origin作为远程仓库的标识符(名称)
|
|
|
|
|
|
|
|
|
|
2. git push 推送到远程仓库
|
|
|
|
|
|
|
|
|
|
(1)git push -u origin master 将本地的master推送至远程的master分支,并且建立关联,关联后直接git push 就会默认选择master。
|
|
|
|
|
|
|
|
|
|
(2)-f 指令是强制覆盖,不要轻易使用,这里是由于原本的库里有README,与本地产生冲突,所以先强制覆盖了。
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
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//推送到远程仓库
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
如果出现下面这个图片,说明推送成功:
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
如果出现这个,不会发生文件的变化,一定有地方错了(比如忘记提交到版本库)
|
|
|
|
|
|
|
|
|
|

|