GIT的用法
下载
通过GIT官网下载
安装成功标志,打开文件夹,右击鼠标,发现有 git 的命令,安装成功
使用
第一阶段 快速入门
1.在资源管理器中,进入项目
2.右击鼠标,选择 Git Base Here ,跳转到 git 命令窗口
3.初始化 git 仓库
1 git init
4.输入命令 git status ,查看该仓库下所有文件的状态 (共三种状态,一、工作区,呈红色;二、缓存区,呈绿色;三、已被管理,不可见)
1 git status // 告诉你有文件被修改过
2 git diff // 可以查看修改内容。
5.提交修改,工作区到缓存区
1 git add 文件名 // 提交单个文件
2 git add . // 提交所有文件
3 注意: git add 命令提交的是修改的内容,所有每次修改文件后,都需要 git add 一下
6.个人信息配置 ( 配置一次即可 )
1 git config --global user.email ‘1446591998@qq.com’ // 配置邮箱
2
3 git config --global user.name ‘lis’ // 配置用户名
7.将缓存区的所有文件提交到当前分支,并生成 git 版本库
1 git commit -m '描述信息' // commit [ kəˈmit ] 承诺,保证
8.查看之前的 git 版本库
1 git log
2 git log --pretty=oneline // 简易化版本记录
第二阶段 拓展功能
1.回滚至之前的版本
1 git log // 查看之前的版本号
2 git reset --hard 版本号 // 回滚到指定的版本 reset [rēˈset] 重启
2.回滚至之后的版本
1 git reflog // 记录每一次命令
2 git reset --hard 版本号 // 回滚到指定的版本
3.丢弃工作区的修改,文件回到上一次修改的时候
1 git checkout -- 文件名
2 // 对还未 add 的文件,回到版本库的状态或上一次 add 之后的状态
4.丢弃缓存区保存的修改,文件回到 add 之前的状态
1 git reset head 文件名
2 // 对已经 add 的文件,删除 缓存区的修改,回到 add 之前的状态
3 // 此时可以进行 git checkout -- 文件名 操作,在删除一次修改
5.撤销修改,版本区回到缓存区
1 // 当文件被 add 而且 commit 之后,如何回到之前的状态呢
2 git reset --soft 版本号
分支撤销修改,版本区回到工作区
1 git reset --mix 版本号 // 回到工作区
2 git reset --hard 版本号 //
分支
在版本更替的时候
1 C1 ------------ > C2 ---------- > C3
2 原始数据 没修改+修改+新增 没修改+修改+新增
3 | | | | |
4 ------------------- | | |
5 | | | |
6 ----------------------------------------
7
8 在 C1 版本保存所有原始数据文件
9 在 C2 版本保存所有 修改+新增 的文件,
10 在 C2 版本不会保存没修改的文件,但会保存一个指向之前版本保存原始文件的指针,这里指向C1
11 // 每有一个文件,保存一个指针
12 在 C3 版本保存所有 修改+新增 的文件,
13 在 C3 版本没修改的文件可能是C1原始的,也可能是C2新增的,会含有多个指向不同版本的指针
1 ----------------> C4 -----
2 | |
3 C3 ---------- > C6
4 | |
5 -----------------> C5 -----
6
7 可能在 C3 的基础上开发了 C4
8 又在 C3 的基础上开发了 C5
9 现在想将 C4 和 C5 整合在一起,形成 C6
10 在此提出分支的概念
分支的作用:假如我们在 C3 的基础上正在开发 C4,但 C3 突然出现 BUG ,我们就需要对 C3 进行修改,变为 C5。
但,我们仍然可以在 C3 的基础上,开发 C4,最后将 C4 和 C5 整合起来,变为 C6 上线。
在这里:以 C1、C2、C3、C6 为干线的这些版本,称为主分支 master
以开发为主的 这条分支,可以起名叫 dev 包含 C1、C2、C3、C4
以修复为主的 这条分支,可以起名叫 bug 包含 C1、C2、C3、C5
当然 修复完bug,可以立即将 bug 分支合并到主分支上,根据业务需求来定。
查看所有的分支
1 git branch // branch [branCH] 支,分会
2 // 默认 master
创建分支
1 git branch 分支名
跳转分支
1 git checkout 分支名
2 git switch 分支名
3 // 在此分支上修改文件,不会影响别的分支上的文件
4 git checkout -b 分支名 // 创建并跳转到该分支
5 git switch -c dev // 创建并跳转到该分支 git 新命令
合并分支
1 git checkout 分支名
2 git switch 分支名
3 // 在此分支上修改文件,不会影响别的分支上的文件
4 git checkout -b 分支名 // 创建并跳转到该分支
5 git switch -c dev // 创建并跳转到该分支 git 新命令
合并分支
1 // 假如我们在 C3 版本发现 bug ,然后创建 bug 分支
2 // 在 bug 分支上,修服完 bug ,保存版本为 C4
3 // 然后 主线合并分支
4 // 一定要切换回mastet 必须在主线上操作 ,然后执行如下代码
5 git checkout master
6 git merge bug // merge [mərj] 合并,融合
删除分支
1 // 修复完bug,分支就没用了
2 git branch -d bug // delete 删除
解决冲突问题
1 // 例 C4 在 C3 基础上开发新项目
2 // C5 修改完 C3 bug,合并到主线
3 // 当开发完成时,将C4 合并到 C5
4 // 会报以下错误
5 Mergo config in 文件名 (起冲突的文件)
6 // 打开该文件 会看到以下情景
7 <<<<<<<<<<<<<<<<<<<<<<< HEAD
8 C5 中与 C4 冲突的文件
9 =================
10 C4 中与 C5 冲突的文件
11 >>>>>>>>>>>>>>>>>>>>>>> dev
12 // 起冲突的原因, C4 和 C5 都对 C3 中同一个文件,进行修改
13 // 这个时候,需要人为的解决这个问题 (例,将 C5 中的内容替换为 C4 的内容,前提 C5 的内容,兼容之前的版本 )
我们在修复 BUG 时,应该尽量兼容之前的版本,解决冲突后再进行合并,就没有问题了。
1 git status
2 // 也可以查看冲突文件
Github 的使用
注册账户
创建仓库
本地代码推送
在命令行上创建新的存储库
1 echo "# github" >> README.md
2 git init
3 git add README.md
4 git commit -m "first commit"
5 git remote add origin https://github.com/14465/github.git
6 git push -u origin master
从命令行推送现有存储库
1 git remote add origin https://github.com/14465/github.git // 远程 增加 仓库名 仓库地址
2 git push -u origin master // 推送 -u 仓库名 支线名
在外地下载代码
1 git clone https://github.com/14465/github.git
2 // clone 完全拷贝
3 // 注意:此时 git branch 只能看到 master ,但你可以使用 git checkout 分支名 跳转到其它分支
dev数据更新
在开发 dev 分支时,应更新 dev 分支 ,将 master 里最新的数据 合并到 dev 里,( master 里的数据不会改变 )
1 // 1.查看 dev (跳转到 dev)
2 git checkout dev
3 // 2.合并 master (获取master最新的数据 [仅一次])
4 git merge master
在外地推送更新完的代码
git push origin dev
回家更新dev
当你回到家时,你应该将在外地上传的dev下载下来
1 git pull origin dev // 拉 仓库名 分支名
2 // 只获取更新后的文件
3 // 开发
4 // 提交
5 git add .
6 git commit -m 'xxx版本'
7 git push origin dev
开发完毕,要上线
1 // 切换
2 git checkout master
3 // 合并
4 git merge dev
5 // 推送 master
6 git push origin master
7 // 更新 dev (保持和master一致)
8 git checkout dev
9 git merge master
10 git push origin dev
11 // 回家拿到最新的 dev ,继续开发 ····
补充
1 git pull origin dev
2 // 等价于下面两条合体
3 git fetch origin dev // 将 dev 从GitHub 下载到版本区, fetch [feCH] 取
4 // 为区别自己的dev,下载的文件名为 origi/dev
5 git merge origin/dev // 将 origin/dev 合并到自己的 dev
6 // 因此自己的 dev 发生变化,将自动变更状态到工作区
rebase 变基
使 git 记录变得简洁
第1种应用场景
将多条提交记录,整合为一条记录
1 git rebase -i 版本号 // 不是最新的版本
2 // 将这个版本号直到最新的版本记录,整合成一条记录
3 git rebase -i HEAD~3
4 // 将最新的3条版本记录整合成一条记录
1 // 上面点击完成后,会显示下面信息 pick [pik] 挑
2 pick 版本号 V2
3 pick 版本号 V3
4 pick 版本号 V4
5
6 // 这个时候,要将 V3 和 V4 最前面的 pick 修改为 s
7 pick 版本号 V2
8 s 版本号 V3
9 s 版本号 V4
10 // s 代表合并到上面的版本去
11 // 在最下面输入命令提交 :wq 保存 :q 返回
12 :wq
1 // 上面点击完成后,会显示下面信息
2 v2 xxxxx
3 v3 xxxxx
4 v4 xxxxx
5 // 这是提示信息,提示你给新的版本起名称
6 // 将上面三条记录,全部删除,然后输入 v2 & v3 & v4 (可以任意起名称)
7
8 // 输入
9 git log
10 // 结果
11 v2 & v3 & v4
12 版本号
13 v1
14 版本号
注意:合并记录时,不要将 push 到远程的版本一起合并,后面处理很麻烦。
第2种应用场景
将支线合并到主线上
1 // 原来主线和支线是两条线
2 C1 --- > C2 --- > C4 --- > C5
3 | |
4 ------ > C3 -------
5 // 合并之后变为一条线
6 C1 --- > C2 --- > C3 --- > C4 --- > C5
1 // 1 先切换到支线
2 git checkout dev
3 // 2 执行 rebase 命令,在 master 中备份
4 git rebase master
5 // 3 切换到主线
6 git checkout master
7 // 4 接收 dev ( 备份接收数据 )
8 git merge dev
查看记录小技巧
1 // 查看历史记录
2 git log
3 // 附带图形模式查看历史记录
4 git log --graph
5 // 查看简洁版的历史记录 (每条记录只含 简易版本号、支线名称、版本名称)
6 git log --graph --pretty=format:"%h %s" // h 代表 hash
第3种应用场景
1 // 在公司写的 v1 忘记上传
2 // 回家写的 v2 上传
3 // 来到公司 不在使用 git pull origin dev (这会产生分叉)
4 git fetch origin dev
5 git rebase origin/dev // 这样不会产生分叉
注意:使用 git rebase 可能会产生冲突,先解决冲突,
然后 git add . ( 将冲突的文件修复完毕,在回到缓存区 )
最后再执行 git rebase --continue
beyond compare
快速解决冲突的软件
安装
在 git 中配置
1 git config --local merge.tool bc3 // --local 只在当前项目生效
2 git config --local mergetool.path 'user/local/bin/bcomp' // 这个路径是 compare 的安装路径
3 git config --local mergetool.keepBackup false // 解决冲突后不保留备份
使用过程
当产生冲突时,它会自动弹出来,并罗列出来,不在需要我们自己在文件里修改
多人协同开发流程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6B7zfCPD-1623920962469)(C:\Users\14465\AppData\Roaming\Typora\typora-user-images\1587909115224.png)]
给当前版本 起标签
git tag -a v1 -m '第一版'
创建组织
邀请成员
在某个项目,在setting中设置权限
在分支的基础上再创建一个分支
1 // 1 先切换到 dev 分支
2 git checkout dev
3 // 2 创建并切换到 ddz 分支
4 git checkout -b ddz // checkout -b == > 先 branch 再 checkout
5 // 然后在这个分支上开发新功能
代码 review
1 // 当 ddz 开发完毕
2 // review 实现方式
3 // GitHub 的 pull request (merge request)
4 // 小领导 在 github 的项目进行配置
5 // setting -- > Branches
6 // 选中 requier pull request 然后再下面的选项 选中 一个人 其它的选项先不用处理
7
8 // 小弟提交
9 // 在项目的 下方 有个 New pull request 按钮,点击
10 // 选中 base:dev <= compare:ddz // 在下面有标题框和描述信息框 自己输入信息即可
11
12 // 小领导会接收到 pull request 请求
13 // 领导可以通过两种方式,检查代码,一:在网站上检查;二、pull 代码到本地,在本地使用工具检查。
14 // 领导检查完代码,点击 perge pull request ,
15 // 然后勾中提示框,在点击 Comfirm merge , 完成 review 操作
16 // 此时查看 dev ,就是 review 之后的 dev 了
fork 源代码
1 // 如果想要copy 别人的源代码
2 // 点击别人的仓库
3 // 点击右上角的 Fork 按钮,将别人的源代码 copy 到自己的远程仓库
4 // 然后就可以在本地 git clone 这个源代码了
5
6 // 如果发现别人源代码的错误
7 // 可以 copy 到本地
8 // 修复完之后
9 // 申请发送给原作者 (pull request)
配置文件存放位置
1 // 例 git config --local user.name '李世粱'
2 // 第一个配置文件 --local 项目配置文件 : 当前项目下的 /./.git/config
3 // 第二个配置文件 --global 全局配置文件 /user/.gitconfig
4 // 第三个配置文件 --system 系统配置文件 /etc/.gitconfig //需要 root 权限
5 // 优先级 1 > 2 > 3
6
7 // 应用场景
8 // 1 用户名 密码
9 // 2 bc3 (解决冲突软件的配置)
git 免密登录
URL 体现
1 // 原来的URL
2 https://github.com/lishiliang666/dbhot
3 // 修改后的URL
4 https://用户名:密码@github.com/lishiliang666/dbhot
5 // 在推送仓库时,使用
6 git remote add origin https://用户名:密码@github.com/lishiliang666/dbhot
7 // 在配置文件种修改
8 // 下次再创建项目 可以在项目名后面加 .git 例 dbhot.git
SSH ***
1 // 1 在自己电脑上生成公钥和私钥 ( C:\Users\~\.ssh\id_rsa.pub ) ~ 就是 user
2 // 打开命令窗口 输入 ssh-keygen 回车 回车
3 // 注意:当要生成新的公钥时,先删除原来的公钥,在上面的第二个回车处,输入 y 加三个空格 在点击回车
4 // id_rsa.pub 公钥 id_rsa 私钥
5 // 打开 id_rsa.pub copy 里面的内容
6
7 // 2 在 github 上 配置公钥
8 // 打开 github
9 // 点击右上角头像
10 // 点击 Settings
11 // 点击 SSH and GPG keys
12 // 点击 New SSH key 按钮
13 // 将 id_rsa.pub 里的内容 复制到 key 的内容框中
14 // 在 title 框 输入 我的电脑
15 // 点击 Add SHH key
16 // 在 git 本地文件配置 ssh 地址
17 // git@github.com:lishiliang666/dbhot.git
18 // 点击自己的仓库,点击右边的下载按钮,将 https 切换到 ssh 即可看到该 ssh 地址
git 自动管理凭证
1 // window 不知道在哪
2 1
3 git 忽略文件
4 // 如果在项目中,有些文件,你不希望被 git 管理
5 // 在当前项目下 创建 .gitignore 文件
6 // 将不想被管理的文件名,写入 .gitignore 文件里
7 // 例 a.h 单个文件
8 // *.h 所有以 .h 为后缀的文件
9 // .gitignore 这个文件本身
10 // files/ files 文件和其下面的所有文件
11 // !a.h 将 a.h 排除
12 // *.h !a.h 就是除了 a.h 外的所有以 .h 为后缀的文件,将不在被管理
13 // 可以将 files 文件下的某个文件 加上 ! 让其重新被管理
14 // 可以去 github 查找 gitignore 人家已经把每种服务器应该要屏蔽的文件类型帮我们列出来了
15 // 项目中一定要加 gitignore
git 任务管理
issues 文档以及任务管理
wiki 项目文档说明
在 git 使用中出现的错误
一 在连接远程仓库时 ,出现错误
1 $ git remote add origin git@github.com:lishiliang666/Typora.git
2 fatal: remote origin already exists.
3 // 致命:远程来源已经存在。 origin 别名以存在
解决方案 删除该别名 在重新创建
1 git remote rm origin // 删除
2 git remote add origin git@github.com:lishiliang666/Typora.git // ok
// *.h !a.h 就是除了 a.h 外的所有以 .h 为后缀的文件,将不在被管理
// 可以将 files 文件下的某个文件 加上 ! 让其重新被管理
// 可以去 github 查找 gitignore 人家已经把每种服务器应该要屏蔽的文件类型帮我们列出来了
// 项目中一定要加 gitignore
1 ## git 任务管理
2
3 ### issues 文档以及任务管理
4
5 ### wiki 项目文档说明
6
7
8
9
10
11 # 在 git 使用中出现的错误
12
13 ### 一 在连接远程仓库时 ,出现错误
14
15 ```shell
16 $ git remote add origin git@github.com:lishiliang666/Typora.git
17 fatal: remote origin already exists.
18 // 致命:远程来源已经存在。 origin 别名以存在
解决方案 删除该别名 在重新创建
1 git remote rm origin // 删除
2 git remote add origin git@github.com:lishiliang666/Typora.git // ok