Git简介
Git是分布式代码管理工具
我的理解呢,就是一个给代码做备份的,更新迭代项目的时候可以随时回退找到以前的版本。
Git中分为三种状态:已修改、已暂存、已提交关键词解释
1、commit节点
在Git中每次提交都会生成一个节点,多次提交就会生成一个线性节点(不考虑merge的情况)
C2节点包含C1提交内容,C3节点包含C1、C2提交的内容
2、HEAD
HEAD可以看做是指针,指针指向的节点始终是当前工作目录。
(HEAD指向C2,那当前的工作目录对应的就是C2节点)
3、远程仓库
github,gitee等就是远程仓库,可以作为中介。你可以在本地上开发,把项目提交到远程仓库上,然后在服务器上拉取。也可以直接提交到服务器上的远程仓库。
4、分支
分支的概念和HEAD类似,可以视为指针或引用,不同的是分支可以存在多个,HEAD只有一个。通常会根据功能或版本建立不同的分支。
Git命令
0、创建仓库
使用当前目录作为Git仓库,我们只需使它初始化
git init
使用我们指定目录作为Git仓库:
git init 目录
1、提交相关
添加文件到暂存区:
git add 文件路径
添加所有文件到暂存区:
git add .
撤销工作区改动:
git checkout -- 文件名
清空暂存区:
git reset HEAD 文件名
提交
git commit -m "该节点的描述信息"
2、分支相关
创建分支:
创建一个分支后该分支会与HEAD指向同一节点,
git branch 分支名
切换分支:
git checkout 分支名
创建一个分支后立即切换:
git checkout -b 分支名
删除分支:
git branch -d 分支名
3、合并相关
常用的合并命令大概有三个merge、rebase、cherry-pick
- merge
将某个分支或者某个节点的代码合并至当前分支
git merge 分支名/节点哈希值
(如果C3、C4同时修改了同一个文件中的同一句代码,这个时候合并会出错,因为Git不知道该以哪个节点为标准,所以这个时候需要我们自己手动合并代码)
- rebase
git rebase 分支名/节点哈希值
与merge不同的是rebase合并看起来不会产生新的节点(实际上是会产生的,只是做了一次复制),而是将需要合并的节点直接累加
- cherry-pick
git cherry-pick 节点哈希值
4、回退相关
- 分离HEAD
默认情况下HEAD是指向分支的,但也可以将HEAD从分支上取下来直接指向某个节点
git checkout 节点哈希值
//也可以直接脱离分支指向当前节点
git checkout --detach
相对引用:
//HEAD分离并指向前一个节点
git checkout 分支名/HEAD^
//HEAD分离并指向前N个节点
git checkout 分支名~N
如果开发过程发现之前的提交有问题,此时可以将HEAD指向对应的节点,修改完毕后再提交,此时你肯定不希望再生成一个新的节点,而你只需在提交时加上--amend即可,具体命令如下:
git commit --amend
- 回退
将代码回到前一个提交
//回退N个提交
git reset HEAD~N
reset会使分支和HEAD一并回退
5、远程相关
- clone
远程仓库上拉取项目:
git clone 仓库地址
- fetch
fetch命令就是一次下载操作,它会将远程新增加的节点以及引用(分支/HEAD)的状态下载到本地
git fetch 远程仓库地址/分支名
- pull
pull命令可以从远程仓库的某个引用拉取代码,pull的本质就是fetch+merge
git pull 远程分支名
pull命令也可以通过rebase进行合并:
git pull --rebase 远程分支名
- push
push命令可以将本地提交推送至远程
git push 远程分支名
push到github仓库的main上(github是自己指定的名字)
git push github main
6、配置远程仓库
显示所有远程仓库:
git remote -v
查看某个仓库信息:
git remote show 仓库名称
添加远程版本库:
git remote add 【自定义名称】【库的url】
删除修改远程版本库:
git remote rm name # 删除远程仓库
git remote rename old_name new_name # 修改仓库名
Git工作流程
功能驱动式开发:先有需求,再有功能分支或者补丁分支,完成开发后,该分支就合并到主分支,然后被删除
1、Git flow
长期分支:
- 主分支 master
- 开发分支 develop
短期分支:
- 功能分支
- 补丁分支
- 预发分支
短期分支一旦开发完成,就会被合并进develop或master,然后被删除
Git遇到的问题解决方法
1、删除已经push的文件
情景:有一些文件已经push到Gitlab上了,但是发现debug文件不小心也push上去,我想要删除所有文件夹里面的debug文件
解决:
本地仓库中查找并删除所有debug文件
find . -name "*debug*" -exec git rm -rf {} \;
find .
:這是find命令,用於在文件系統中查找文件。.
表示從當前目錄開始搜索-name "*debug*"
:這是一個選項,指定要查找的文件名模式*debug*
表示任何包含"debug"字符串的文件名-exec
:這是一個選項,它允許對每個匹配的文件執行一個命令git rm -rf {}
:這是要執行的命令。git rm -rf
用於強制刪除一個或多個文件。{}
是一個特殊符號,代表find命令找到的每個匹配文件\;
:這標志着-exec選項的結束。注意前面有一個反斜槓,這是因爲分號在shell中有特殊含義,需要轉義
git commit -m "Remove all debug files"
学习的链接:
https://mp.weixin.qq.com/s/AlV50I6FLxUwKi-F6802Aw
https://www.runoob.com/git/git-remote.html
git工作流程
gitLab pull request工作流