Git
安装
注册账号
进入 Git Bash
输入用户名 邮箱来注册,框住的内容为自定义
获取git版本库
将本地的文件夹变成git版本库
在想要变成git版本库的文件夹下右键使用git bash
输入命令 git init
带有.git的就代表这个文件夹已经是git版本库了
将其他人的git库克隆到本地
使用git clone命令
右边的地址可以通过github中找到
因此可以将自己的代码上传到github,这样之后在任何地方都可以通过这个地址将git库安装过来
git仓库的三种状态以及对应工作区
三种状态
对应工作区
查看版本库的状态(使用git时第一个要用的命令)
git status 用于查看当前版本库的状态
git status -short 或者是 git status -s 是以简单信息的形式查看版本库状态
使用git status -s 出现的信息中各符号代表的含义:
空格也有含义,含义是表示当前文件在暂存区的状态
文件的追踪和更新
git add 文件名或者文件夹名(如果文件名或者目录名里带有空格,就需要将名字用双引号包含住)
添加当前目录: git add . (点来代表当前目录,添加当前目录不会添加空文件夹,如果想要添加空文件夹需要在文件夹下随便创建一个空的文件)
git add除了可以用它来开始追踪新的文件或者把已经追踪的文件放到暂存区,还能用于合并时把有冲突的文件,标记为已解决状态等。
提交更新
git commit -m “这里填写更新信息”
使用git commit的话会自动跳出填写日志信息的编辑器,默认是vim编辑器。如果使用git commit -m 就不会弹出编辑器
历史版本追踪与文件忽略
git log
git log 会按照提交的时间列出所有的更新,最新的更新会排在最上面,按回车键进行翻页,按q键可以退出查看
git log -p 加上-p会使输出信息附带每次commit发生的变化
git log -p -数字 会显示最近三次的提交的详细信息
git log --stat 会显示被修改文件的哪些行被移除了或是添加了
git log --since=2.weeks 会显示两周内所有的更新
git diff
git diff 显示当前工作目录中当前文件和暂存区域快照之间的差异 也就是修改之后还没有暂存起来的内容
git diff --staged 查看已经暂存的将要添加到下一次提交里的内容
git diff SHA-1校验码 SHA-1校验码 可以对比前后文件的差异, SHA-1校验码可以通过 git log 获取 文件校验码很长,一般只需要SHA-1校验码中的4个字母即可找到对应的文件
头指针-HEAD指针
HEAD指针也叫头指针,HEAD指针默认指向当前版本库的最后一个版本,我们可以使用HEAD指针来对比当前版本与某一历史版本之间的差别
因此 可以通过HEAD指针来代替 最新SHA-1校验码。
git diff HEAD SHA-1校验码 即可对比当前版本库与SHA-1校验码对应的版本库之间的差异
HEAD^代表当前版本的上一版本
HEAD^^代表当前版本的上上版本
因此也可以使用 git diff HEAD HEAD^ 来显示当前版本与上一版本的区别
还原历史版本
git checkout
git checkout 可以将HEAD指针移动到任意版本处(意思就是还原整个仓库)(比较复杂,需要深入学习)
还原某一个文件:
git checkout HEAD^ test_file.txt 将test_file.txt 文件还原至上一版本
git checkout – 文件名 清空当前未被追踪的改动(撤销还未提交的针对文件的改动)
git revert
这个命令和git checkout 的区别是这个命令会新建一个版本,因此不会导致修改历史的消失。
git revert 命令只能用于工作区和暂存区都为空的时候才可以被使用(工作区是否为空可以通过git status来查看)
git revert HEAD
git reset
这个命令可以直接将部分文件或者整个仓库还原到某个历史状态下,与此同时,暂存区的内容也会被清理掉。变为未被追踪的状态。
因为这个命令很容易导致代码丢失,所以不推荐使用这个命令。
如果希望回退版本建议使用 git revert
忽略文件
如果希望git仓库不追踪某些文件
那么可以在仓库中创建一个.gitignore文件来忽略某些文件
举例
在仓库中右键新建一个文本,然后改名叫.gitignore. (如果是windows系统那么需要前后都有点)。然后打开这个文件输入*.txt 意思就是忽略所有以.txt结尾的文件
.gitignore模板
https://github.com/github/gitignore
Git分支操作
使用分支可以把工作从开发主线上分离,以免影响开发主线,对于社会化协作的项目来说,分支提供了很好的代码隔离的功能,核心开发者们可以借助对比分支的方式对新加入的代码进行审核,并在其中挑选出有用的分支,合并到主分支当中以确保项目的健康稳定。
查看分支
git branch 会显示当前库中的分支,当前使用的分支会以*开头标注
git branch -a 查看远程分支(显示所有分支)
创建、切换、修改、删除分支
创建:
使用 git init 命令会自动创建一个 master 分支
git branch 分支名 创建一个新的分支
切换
git checkout 分支名可以切换分支(新建分支并不会直接切换到新建的那个分支,需要用到这个命令来切换)
切换分支时必须谨慎地关注工作目录中文件的变化,切换分支的同时会将工作目录更改为不同分支对应的目录
修改
git branch -m 分支名 新分支名 修改分支的名字
删除
git branch -d 分支名 删除某一个分支
git branch -D 分支名 强制删除一个还没有合并的分支
合并分支
首先 git checkout 到想要并入的分支然后再使用merge命令合并
命令: git merge <想要使其合并到当前分支的那个分支名>
合并冲突
假如一个主分支分出来的两个分支对同一文件进行了编辑,那么合并这两个分支时就会产生合并冲突。
处理完有冲突的文件后,使用git add 重新添加这个文件进行提交即可解决冲突
协作开发中的分支架构
协作项目中的分支规则
根据分支存在的生命周期长短不同,大致上将分支分为长期分支,和短期分支两种
长期分支是指一直存在的分支,短期分支指的是用完即销毁的分支
短期分支可以将问题集中化,一个分支只解决一个问题,非常适合用作单一特性的开发,或明确的bug修复等这样的短期工作
长期分支更加适合解决整个项目运行过程中一直需要应对的问题,比如存放当前可运行的最终代码,或者临时存放需要测试的代码等
适合协作的分支架构
master 分支是版本库初始化时自动被创建出来的分支,项目中所有的分支都来源于这个分支。
master分支来管理发布后的最终代码,在除了初始化阶段外的任何时候,master分支上的代码都应当是稳定和可用的。
dev分支是用来维护整个开发的进程的,所有的特征分支(短期分支,针对某一项进行开发)都需要从这个分支开始,并最终合并回这个分支。
当任务创建出来之后,特征分支就可以随时被创建出来,开发者们在特征分支上不断的提交更新,直到完成开发工作,最终将特性分支合并到dev分支上并删掉原有的特性分支,当dev分支上的代码已经达到了可用的阶段时即可进入发布,发布的目的是将开发完成的代码打包成一个可以直接使用的软件。
发布阶段可以从dev分支创建一个短期的release分支或是将dev分支合并到一个长期的release分支上进行测试和编译,测试中的修改可以继续在这个分支上进行,但是当发布完成后一定要将所有的修改合并回dev分支,并将最终的代码合并到master分支上。
当发现master分支上的代码,存在紧急的bug的时候,则需要临时创建一个hotfix分支来快速的修复,hotfix分支和特征分支一样,也应当是短期的分支,当bug修复之后,即需要尽快的将其合并到master和dev上以保持代码的可靠性。
远程分支操作
如果想要为本地自己 init 的git库添加远程库则可以使用这个命令:
git remote -v 查看当前版本库的远程库 fetch是下载,push是上传
git remote add <git库名字> <git库路径> 可以额外添加远程分支
在远程库被添加之后,本地仓库中则会同时出现本地的分支和远程的分支,那些存在于远程库中的分支并不会将本地的分支覆盖或与之自动的合并,而是会以远程分支的形式存在
远程分支以远程库的名称作为名称空间并以斜杠作为连接符与原本的分支名连接
远程分支其实也存在于本地的版本库当中。与本地分支不同,远程分支并不能直接被修改,它的功能是用于与远程库中相同的分支进行信息同步,远程分支中的信息一般和远程库中保持一致,当远程库有新的更新时可以使用git fetch命令更新本地仓库的远程分支。
从远程库拉取新代码:
例如当远程库origin发生了更多的操作而导致与本地库不同时则可以使用,git fetch origin命令从远程库origin中同步更新所有的远程分支信息。更新完远程分支信息之后则可以使用git merge 命令将其合并到对应的本地分支上。
也可以通过 git pull <远程库名> <分支名> 来一步到位同步远程库的远程分支到当前的分支,这里举例就是将origin远程库的new_test分支合并到当前的new_test分支
git branch -vv 来查看本地分支与远程分支之间的关联 关系
如果本地分支与远程分支之间已经建立了关系,则更新时就可以直接省略远程库名和分支名,直接写为 git pull
将远程分支同步到本地:git checkout origin/remote_branch 这样本地就会自动创建一个 remote_branch分支并与origin/remote_branch关联
当修改了本地分支后,如果希望将其推送到远程库中时,则可以通过 git push origin 分支名 将当前活动的本地分支推送到远程库上的同名分支上去,如果远程的同名分支不存在则会被新建出来。
Git常用命令以及注意事项
将本地的代码上传到github的流程:https://cloud.tencent.com/developer/article/1648509
git clone 把远程库克隆到本地进行开发
git branch 创建一个要添加修改的分支(一个公司的,一个家里的)
git push origin + 你现在的分支名 向远程库推送自己的更新 (vscode有插件可以用vscode来推送)
git pull --rebase origin master 更新远程主分支的内容到本地
vscode 结合 git的使用说明:
https://blog.l0v0.com/posts/94ffdbdf.html
https://blog.l0v0.com/posts/a91a4c58.html
使用SSH来传输
https://blog.csdn.net/qq_38163309/article/details/105335097
https://www.bilibili.com/video/BV1EE41157ro/?spm_id_from=333.1007.top_right_bar_window_history.content.click