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