GeekHour-一小时Git教程-笔记
学习地址
学习记录
1 |
|
07.使用git diff 查看差异
语法
1 |
|
08.使用git rm删除文件
git rm的优势
可以使用git rm file1.txt
来直接删除工作区和暂存区的文件,比较方便
而不用git rm
也可以,就是先rm file1.txt
在执行git add .
麻烦一点。
语法
1 |
|
09.使用.gitignore忽略文件
应该忽略哪些文件
在.gitignore中添加文件名后,运行git status
会发现该文件不再被git所自动追踪
在.gitignore里添加忽略前已经被添加到版本库中的文件,在.gitignore文件添加忽略后, 仍然会被追踪,比如文件内容发生了变化
语法
- 在gitignore中添加文件的名字表示不追踪
- 在gitignore中还可以添加文件夹的名字
举例说明
1 |
|
.gitignore文件匹配规则
11.SSH配置和克隆仓库
实践
配置SSH
这里可以参考我的SSH配置笔记2.设置SSH密钥登录教程
然后在github上添加本机的SSH公钥
https://github.com/settings/keys
创建仓库
直接在github上new respority
然后使用ssh方式git clone下来即可
关联clone下来的本地和远程仓库-通过git push和git pull
语法
1 |
|
我们在git commit之后,改变的是本地的仓库,要推送到远程仓库去,需要使用git push
,使用git pull
拉取别人的修改。
实践
12.关联已经存在的本地仓库和远程仓库
语法
1 |
|
和上面第11点里关联clone下来的本地和远程仓库的区别
- clone下来的的仓库是来自于已经存在的远程仓库,两者之间本就已经存在联系
- 已经存在的本地仓库则和远程仓库没有关联,因此需要手动创建关联。
- 在12点里因为是本地仓库关联远程分支,需要使用
git push -u
手动建立追踪关系,而在11点里则使用git push
就行。git-push用法:-u参数
1. 加
-u
的效果:- 使用
git push -u <remote> <branch>
,会将本地分支与远程分支关联起来。 - 建立追踪关系后,后续在该分支上推送或拉取时,不需要再指定远程分支,可以直接使用简单命令:
git pull git push
而不需要显式指定git push origin branch
。
示例:
git push -u origin main
效果: - 将本地
main
分支推送到远程仓库的main
分支。 - 本地分支
main
与远程origin/main
建立了追踪关系。 - 之后在本地
main
分支,可以直接运行:
git pull git push
2. 不加
-u
的效果:- 使用
git push <remote> <branch>
,仅推送本地分支到远程对应分支,但不建立追踪关系。 - 后续每次
push
或pull
都需要显式指定远程分支。
示例:git push origin main
效果: - 将本地
main
分支推送到远程仓库的main
分支。 - 不会建立追踪关系。
- 之后每次推送或拉取时,都需要指定远程分支:
git pull origin main git push origin main
3. 如何查看追踪关系:
使用
git branch -vv
命令可以查看本地分支与远程分支的关联情况。
示例:1
2
3$ git branch -vv
* main a1b2c3d [origin/main] Initial commit
* feature d4e5f6g [origin/feature] Added new feature这里可以看到
main
和feature
分支分别追踪了origin/main
和origin/feature
。4. 什么时候需要用
-u
:- 首次推送新分支:在第一次将本地分支推送到远程分支时,建议使用
-u
,方便后续操作。 - 关联已有分支:如果本地分支已经存在,但没有追踪远程分支,可以用
-u
来建立关联。
5. 为已存在的分支建立追踪关系:
如果忘记加
-u
,可以手动建立追踪关系:git branch --set-upstream-to=origin/main main
- 使用
实践
首先在github上创建一个仓库
注意,为了看到提示界面,记得在创建仓库的时候不要勾选”Add a README FILE”,不然会无法看到以下界面:
其中主要看第二段:
解释如下:
1 |
|
16.分支简介和基本操作
什么是分支
当多人共同协作开发时,在原有的一条主线上可以分支出另一条分支供他人开发,同时不耽误主线的进度,这条分支可以起到多种功能,例如
- bug修复
- 合入新的pr
- 添加新的feature
分支的特点
- 每个分支都有自己独立的提交记录和工作区,在主线节点创建分支时,该分支具有原有节点的工作区内容,但此时没有提交记录。
语法
- 分支间切换需要使用
git switch
进行,创建分支后,并不会自动切换到新创建的分支上,可以用switch切换过去 - 切换分支后,原有工作区内容也会随着切换到当前工作区的样子
git merge
合并分支后面跟的branch-name表示要被合并的分支名,执行merge
后branch-name分支会被合并到当前正在的分支上,所以我们在合并分支前要先切换分支。- 上面删除分支中
-d
用在git merge
之后,如果还未执行merge操作是无法用-d
删除的,此时可以用-D
强制删除。
17.解决合并冲突
语法
18.回退和rebase
语法
1 |
|
什么是rebase
除了merge以外,还有一种方法可以把不同分支的内容整合到一起,这就是rebase。rebase意思是“变基”。
rebase的效果
原分支如下:
执行rebase后:
可以看到,正如rebase的含义所示,git rebase main
表示以main分支为基,所以main分支不变,把dev分支和main分支的相同祖先节点之后的提交记录裁剪到了main分支的后面。而git rebase dev
则是把main分支的提交记录裁剪到了dev分支后面。
rebase和merge的区别,如何区分使用
区别
- merge一般在main分支上执行,而rebase可以在任一分支上执行。
区分使用
git merge
的特点
优点:不会破坏原分支的提交历史,方便回溯和查看
缺点:会产生额外的提交节点,分支图比较复杂。git rebase
的特点
优点:不会新增额外的提交记录,形成线性历史,比较直观和干净
缺点:会改变提交历史,改变了当前分支branch out的节点。避免在共享分支使用
19.分支管理和工作流模型
GitFlow模型
组成分支
- 基线分支,也即main/master分支,一般是生产版本也即最终发布的代码,不允许直接修改,只能通过合并分支的方式修改。每次合并都建议生成一个新的版本号,可以通过
git tag
命令来标记版本号。以下是一个常见版本号规则: - 问题修复分支,也即hotfix分支,一般从主线分支分离出来的
- 开发分支,一般是从主线分支分离出来的。
- 功能分支,一般用于添加某一功能时,是从开发分支分离出来的,当功能稳定后再合并回开发分支中。
- 版本发布分支,也叫预发布分支,release分支。包含项目最新代码,用于正式发布前验证。一般是从开发分支中分离出来的。
以上分支按照重要性分类:
- 主要分支:即main和develop分支,这两个分支最重要,一般也是长期存在的。
- 辅助分支:其他分支属于辅助分支,一般在完成各自功能后就可以删除了。
GitHub Flow工作模型
特点
- 相比于git flow工作模型简单明了
- 适用于技术水平比较高的团队或者开源项目
组成分支
仅仅两条分支,主分支和功能分支,主分支是不允许提交的,并且主分支上的代码可以直接用于生产环境。
团队成员可以从主分支中分离出自己的分支进行开发和测试,然后在本地分支提交代码,等到开发完成后,可以Pull Request,中文名也叫拉请求/合并请求,团队成员可以对代码进行Review评审,如果没有问题就可以把这个PR发布和合并到主线分支中。