一、Git简介
版本控制系统(VCS)是将『什么时候、谁、对什么文件做了怎样的修改』这样的信息以版本的形式保存并进行管理的系统。
简单来说,版本控制系统会去记录它所管理的文件的『历史版本』。
1、git相关术语
- 本地仓库:你自己电脑上的一个目录,将这个目录设置为git的本地仓库,自己的代码必须都在本地仓库中操作。只有自己能访问
- 远程仓库:公司的git私服/网络上的git仓库服务(github,gitee)。所有人都能访问。远程仓库只能接收本地仓库中的数据
2、git常用命令【重点】
-
Git 的配置
在使用 git 之前需要使用 config 命令配置下用户名和用户邮箱,提交代码时让git知道是谁在操作
git config --global user.name "帐号" git config --global user.email "zh" git config --global push.default simple git config --global core.editor notepad
配置内容保存在C://Users\Administrator/.gitconfig
-
创建本地版本库(初始化)
在电脑的任意位置建一个目录(hello)。进入到该目录中输入如下命令:
git init
命令执行完后hello目录中会有一个.git目录。这个.git目录才是你的本地版本库
hello目录中除了.git以外的部分称为工作区,你的代码必须放在工作区中才能提交到本地版本库
所有放在工作区中的文件,git才能够时时检测其状态
-
将要提交给版本库的文件添加到版本库的暂存区
如果一个文件已在暂存区则不用重复添加
git add 文件名 或 git add 目录名
绿色+: 文件添加到了暂存区
绿色勾:文件添加到了暂存区并提交到了版本库,此时工作区中的文件与版本库中的文件是一模一样的
红色!: 本地工作区中的文件与版本库中的文件不一致
黄色笔:本地工作区中的文件内容进行了修改,与版本库中的文件不一致
-
提交到版本库
git commit [file1] [file2] ... -m [message] ##必须添加描述信息,如果是文件夹,文件夹不能为空
-
删除版本库中的内容
将工作区中对应的内容删除,然提交到版本库即可。【一般这样用】
git rm 用于删除文件,删除行为分为『弱删除』和『强删除』。
-
git rm --cache 是『弱』删除。
它表示让 Git『不再监管』某文件/文件夹,而该文件/文件夹在磁盘上『仍存在』。
git rm "hello.txt" --cache
-
git rm 是强删除
它表示告知 Git『不再监管』某文件/文件夹的同时,还从硬盘上『删除』此文件/文件夹
-
-
检出历史版本
git checkout [ 版本标识 | 标签 ] <文件1>, <文件2>, ...
-
撤消操作
-
撤消未提交的操作
添加到了暂存区,还没有提交到版本库中的内容
git reset --hard
-
单独撤销某个文件的未提交变动
git checkout -- <文件名>
-
撤销刚才的提交
git reset --soft HEAD~1 //1表示撤消一步
-
3、.gitignore 文件
Git 中文件的受管状态
状态 | 说明 |
---|---|
tracked被追踪 | tracked 状态意味着 Git 正在关注着这个文件。 你对这个文件的任何改动,都会被 Git 发现。Git 会进一步要求你提交你的改动,或撤销你的改动。 |
ignored被忽略的 | ignored 状态意味着 Git 完全不管这个文件,在 Git 看来它就跟不存在一样。 |
untracked不被追踪的 | untracked 状态是所有文件的初始状态。 逻辑上,它是 tracked 和 ignored 状态『之前』的一种状态,逻辑上,它是一种临时状态:你既没有要求 Git 监管它,又没有要求 Git 忽略它。 对于这个文件,Git 也是一脸懵逼不知道接下来该不该监测文件的变动,正因为如此,untracked 是一种临时状态,不应该长期存在。 |
注意
这里有 2 点需要强调的是:
所有的文件的初始状态都是 untracked 。
在正常情况下,文件不应该长期处于 untracked 状态,应尽快转变为 tracked 或 ignored 。
.gitignore 文件是git中用设置哪些内容不被管理
简单来说,.gitignore 文件就是一个『黑名单』,在其中列举的文件都不会被 Git 管理,Git 不会关注这些文件的创建、删除、改动,也不会将它们存入到本地版本库,更不会将它们上传到远程仓库。
4、git核心思想
在git中要时刻保持工作区中的内容与版本库中的内容一致。
二、分支操作【重点】
在git中master称为主分支,主分支上是不允许直接改变的
当项目经理把项目上传到远程仓库后,为了保证大家相互之间写代码不冲突。会在仓 库中为每一个程序员创建一个分支(将当前分支的内容复制一份)
-
创建分支
git branch 新分支名 [从当前分支的 Commit]
-
切换分支
git checkout <分支名>
-
删除分支
git branch -d <被删除分支名>
-
合并分支
合并分支就是将自己的分支内容合并到主分支中
-
普通合并
步骤: 切换到主分支 选中子分支中要合并的节点 命令: git merge <另一个分支名>
-
快速合并
“快速合并” 和 “非快速合并” 的最大区别在于:普通合并/非快速合并,会产生一个新的提交节点。快速合并不会产生新节点
git merge --ff <另一个分支名>
-
-
变基
如果你要拿到其他分支的代码:其他分支的代码先合并到主分支,你自己的分支基于主分支最新的节点变基
变基是站在自己的节点上将主分支的代码合进来。变基不会新增节点
git rebase master
三、合并冲突【重点】
如果多个分支对同一个文件进行了操作,合并分支时git会检测文件,如果检测到有多个分支对同一个文件进行了修改就会警告提示。这种问题称为代码冲突.
代码冲突只能由程序员手动解决。合并谁的分支产生的冲突,就由谁负责解决
可以将gitkraken自带的代码比较器改为vscode
-
确定vscode是否在系统中配了环境变量
path: C:\Program Files\VSCode\bin
-
修改.gitconfig
[diff] tool = vscode [difftool "vscode"] cmd = code --wait --diff $LOCAL $REMOTE [merge] tool = vscode [mergetool "vscode"] keepbackup = false cmd = code --wait $MERGED trustexitcode = true
四、GIT工作流
-
准备工作
-
项目经理搭建远程仓库并上传项目(主分支设保护)
-
项目经理将组员添加到仓库中
-
组员拉取远程仓库到本地(创建自己的分支并上传)
-
-
组员日常操作
-
每天早上一来拉取远程仓库(主分支,自己的分支)
-
代码开发写功能
-
自己的功能写完后上传到远程仓库
- 每天下班前上传
- 其他人要使用自己的代码
-
自己的功能上传后告诉项目经理进行代码合并
-
项目经理合并完成后通知其他组员变基
- 暂存自己当前任务
- 更新主分支
- 将主分支变基为自己的节点
-