文章目录
- 1. git工作机制
- 2. git 常用命令
- 2.1 签名的作用
- 2.2 初始化本地库
- 2.3 查看本地库状态
- 2.4 将工作区的文件添加到暂存区
- 2.5 提交本地库
- 2.6 修改文件
- 2.7 历史版本
- 2.8 版本穿梭
- 3.分支操作
- 3.1 分支的作用
- 3.2 分支命令操作
- 4. 团队协作
- 4.1 团队内协作
- 4.2 跨团队协作
- 5. github 实践
- 5.1 创建远程库
- 5.2 克隆远程仓库
- 5.3 给仓库取别名
- 5.4 推送到远程仓库
- 5.5 拉取远程库
- 5.6 使用ssh
- 6. Git 集成 IDEA
- 6.1 忽略隐藏文件
- 6.2 git配置及初始化仓库
- 6.3 提交代码
- 6.4 切换分支
- 6.5 合并分支
- 6.6 冲突合并
- 7. IDEA 集成 Github
- 7.1 idea里登陆github
- 7.2 分享项目到 Github
-
因为之前安装过,所以介绍 安装什么的就不提了 记点关键的
1. git工作机制
工作区:就是你的项目在磁盘上的位置
暂存区:git add 以后的临时存放位置 必须先add 再commit
本地库:记录已经在本地库生成了 你干了什么坏事 这上面都会写着 无法撤销 除非删除整个项目
ps:历史版本是不能被删除的 如 v1 v2 v3 v3是基于v2的 所以v2版本删除不了
2. git 常用命令
2.1 签名的作用
签名的作用是区分不同操作者身份
。用户的签名信息在每一个版本的提交信息中能够看
到,以此确认本次提交是谁做的。
Git 首次安装必须设置一下用户签名,否则无法提交代码。
⚠️ 注意:这里设置用户签名和将来登录 GitHub(或其他代码托管中心)的账号没有任何关系
。
示例
git config --global user.name bb
git config --global user.email 102992294@qq.com
cat ~/.gitconfig
[user]
name = bb
email = 102992294@qq.com
在家目录的 .gitconfig 文件下可以查看是否设置成功
2.2 初始化本地库
新建一个文件夹 在文件夹下
git init
出现这行代表创建成功
Initialized empty Git repository in /Users/edy/work/gitResponsitory/gitdemo/.git
你会发现在文件夹下会出现一个隐藏目录 .git
注意这个文件不要进行任何改动
2.3 查看本地库状态
首次查看(工作区没有任何文件)
git status
On branch master
No commits yet
nothing to commit (create/copy files and use "git add" to track)
新增文件查看
touch bbtest
注意 那不是报错 只是提示你 这个文件没有被 add 进暂存区 导致git 无法追踪
2.4 将工作区的文件添加到暂存区
git add 文件名
# 添加所有文件 后面跟点号
git add .
再次查看状态就会发现不一样了
2.5 提交本地库
# 加文件名是提交对应文件 省略则是提交全部文件
git commit -m "日志信息xxxxx" 文件名
2.6 修改文件
步骤:修改文件->查看状态-再次提交到暂存区->查看状态
2.7 历史版本
查看版本信息
git reflog
只往本地库提交了一次 所以只有一条记录
有同学会发现怎么退出不了呢? 按q键就能退出了 下同
查看版本详细信息
git log
比之前的多了作者和日期 在多人协作的情况下这就很重要了
2.8 版本穿梭
顾名思义 就是回退到之前的版本 必须是你提交到本地库的才可以
这里我新提交了两个版本
根据 git log
查看下
如果我想回退到版本2 可以使用下面命令
git reset --hard 版本号
这里的版本号就是git随机生成的序列号 使用前几位就可以了
可以看到 之前的 bb3不见了
其实底层是类似于链表形式 每次回退版本就移动指针
3.分支操作
3.1 分支的作用
看图 上面已经写的很明白了 如果想新增什么功能 就新建一个分支 这样的好处是不影响主分支的运行
到后面再合并就是了
况且 如果多人协作 你弄一个master 很容易造成开发提交代码的混乱
3.2 分支命令操作
3.2.1 查看分支
git branch -v
可以看到 目前就一个分支master
3.2.2 创建分支
git branch 分支名
想新增一个飞机小游戏
git branch plane-game
查看下
git branch -v
可以看到 新增了一个飞机游戏的分支
3.2.3 切换分支
git checkout 分支名
新增点内容 以便于后面合并 注意 合并前 需要将新的内容提交到本地库
3.2.4 合并分支
git merge 分支名
注意 合并分支 需要先切换到对应的分支 比如切换到master 再合并 可别傻傻的在plane-game上合并 没用的哦
3.2.5 产生冲突
什么情况下会产生冲突呢?
就是不同的分支 修改了同一个文件 那么git如何区分该选用哪一个呢
对于这种情况 只能靠人为来决定了
查看一下 哪个文件造成了冲突
打开bbtest 发现两个分支的内容进行了合并
怎样解决呢? 只需要保留我们要的 删除多余的特殊符号 再add+commit 就好了
4. 团队协作
4.1 团队内协作
当某人初始代码上传后 就push到远程库 而其他人clone后 就可以对代码进行修改 之后再push
而再次push时是会失败的 因为远程库发生了更新 所以需要线pull 拉取后再推送才可以
4.2 跨团队协作
看图 当岳不群觉得自己的代码不够好 让东方不败修改
那看在令狐冲的面子上 那就改改吧
东方不败先fork 进自己的远程库 然后克隆 可能会升级好几个版本
等到最终修改完成 push进远程库 然后 pull request 向岳不群提出申请 说 修改好了
岳不群审核过后 再合并分支 pull 拉到自己的本地 慢慢研究。。。
5. github 实践
5.1 创建远程库
登录github 右上角点击
随便取个名字 私有的直接创建即可
ps: 可能你网不太好 那么用gitee什么的也是一样的
创建完了就是这样的
很贴心 下面还教了你怎么使用命令 不过看我演示就够啦
你可以用两种方式将仓库克隆到本地 分别是https和 ssh
5.2 克隆远程仓库
首先要克隆到本地 我使用的是https的方式
git clone xxxxxxxx.git
提示你 输入用户名 一般克隆其实是不需要的 但是我是私有库
git clone https://github.com.cnpmjs.org/Strong-bb/git-demo.git
Cloning into 'git-demo'...
Username for 'https://github.com.cnpmjs.org': 1029922944@qq.com
Password for 'https://1029922944@qq.com@github.com.cnpmjs.org':
remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.
fatal: Authentication failed for 'https://github.com.cnpmjs.org/Strong-bb/git-demo.git/'
但提示说 截止到2021.8.13 已经不支持用户名来克隆仓库了而需要采用私人的密钥
解决办法
点击这个链接 按步骤创建私人密钥即可
再次克隆 输入用户名 就是生成的token
git clone https://github.com.cnpmjs.org/Strong-bb/git-demo.git
Cloning into 'git-demo'...
Username for 'https://github.com.cnpmjs.org': Strong-bb
Password for 'https://Strong-bb@github.com.cnpmjs.org':
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
克隆成功
5.3 给仓库取别名
看到上面一长串地址了吧 为了便于记忆 咱们可以取别名
那么下次pull push clone什么的 都不用复制那么一长串的地址了
其实也就两个命令
git remote -v 查看当前所有远程地址别名
git remote add 别名 远程地址
来演示下
git remote -v
origin https://github.com.cnpmjs.org/Strong-bb/git-demo.git (fetch)
origin https://github.com.cnpmjs.org/Strong-bb/git-demo.git (push)
显示两个地址 一个是拉取的地址 一个是推送的地址
新增别名
git remote add git-demo https://github.com/Strong-bb/git-demo.git
再次查看
➜ git-demo git:(main) git remote -v
git-demo https://github.com/Strong-bb/git-demo.git (fetch)
git-demo https://github.com/Strong-bb/git-demo.git (push)
origin https://github.com.cnpmjs.org/Strong-bb/git-demo.git (fetch)
origin https://github.com.cnpmjs.org/Strong-bb/git-demo.git (push)
当你下次克隆的时候 直接 git clone git-demo
即可 前提是必须登陆过的
5.4 推送到远程仓库
命令:git push 别名/地址 分支名
➜ git-demo git:(main) ✗ git add .
➜ git-demo git:(main) ✗ git commit -m "add random xxx"
[main ff2fb50] add random xxx
1 file changed, 10 insertions(+)
➜ git-demo git:(main) git push git-demo main
^C
➜ git-demo git:(main) git push git-demo2 main
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Writing objects: 100% (3/3), 267 bytes | 267.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com.cnpmjs.org/Strong-bb/git-demo.git
fb6d581..ff2fb50 main -> main
注意 推送前需要 先add commit 才行 不然白推送了
细心的小伙伴可以看到 我推送的是 git-demo 因为我又使用了github加速的地址
原先的地址实在是推送不上去 建议国内的小伙伴直接用gitee什么的即可 都是一样的
ps: github 现在默认主分支为main
5.5 拉取远程库
如果我们在网页端修改或者提交了什么东西
亦或者是别人新提交了代码
本地库是不能实时同步的所以要先同步远程库代码 否则咱们本地库新增的代码也无法提交 会报错
示例如下
拉取代码
git pull 别名/地址 分支名
➜ git-demo git:(main) git pull git-demo2 main
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://github.com.cnpmjs.org/Strong-bb/git-demo
* branch main -> FETCH_HEAD
ff2fb50..49f0686 main -> git-demo2/main
Updating ff2fb50..49f0686
Fast-forward
xixi.txt | 1 +
1 file changed, 1 insertion(+)
create mode 100644 xixi.txt
可以看到 最后几行 将xixi.txt
文件新增了
5.6 使用ssh
ssh可以免密操作 相当于使用密钥 对比下 你电脑中的密钥与github账户里的密钥是相同的
那么你就有这个权限
在对应的用户目录下 复制下面命令 生成对应的.ssh 文件 邮箱换成自己的即可
连按3次回车 即可生成
➜ ~ ssh-keygen -t rsa -C 1029922944@qq.com
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/edy/.ssh/id_rsa):
Created directory '/Users/edy/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/edy/.ssh/id_rsa.
Your public key has been saved in /Users/edy/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:ry/yEAa46fztN9Pdd4ZPQ+roLGa1d5skuuCJoj1wr2s 1029922944@qq.com
The key's randomart image is:
+---[RSA 3072]----+
| |
| . |
| . . |
| o . |
| o o S . |
| o . o . . . o |
| o o o oo..+ +.|
| ..E.oB==.=.=o*|
| .+=B==B+*o..*+|
+----[SHA256]-----+
➜ ~
我使用的是mac 所以对应的文件夹在 /Users/edy/.ssh
这里 你们也可以自己找找
会生成id_rsa
和 id_rsa.pub
两个文件 证明成功了 我们只需要在github中点击setting
进入该页面
pull一下 注意 是否确定连接
不要回车 不要回车 不要回车
输入 yes 即可 否则会报错
git pull git@github.com:Strong-bb/git-demo.git main
The authenticity of host 'github.com (140.82.112.4)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'github.com,140.82.112.4' (RSA) to the list of known hosts.
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (3/3), done.
Unpacking objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
From github.com:Strong-bb/git-demo
* branch main -> FETCH_HEAD
Updating 49f0686..4a7e753
Fast-forward
bb.txt | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
6. Git 集成 IDEA
6.1 忽略隐藏文件
我们提交的代码 有些东西其实是不需要提交的 比如说 .idea
,target
文件等 所以需要配置下 哪些东西不需要提交
在 用户目录下 新增 git.ignore
文件
vim git.ignore
其实只要后缀是 .ignore
即可 前缀是无所谓的
复制下面内容 即可
# Log file
*.log
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
# virtual machine crash logs, see
http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
.classpath
.project
.settings
target
.idea
*.iml
还没完 还需要配置下
原先就有一个 .gitconfig
文件 编辑下
新增以下内容 我的用户目录跟你的肯定是不一样的 这点需要注意
[core]
excludesfile =/Users/edy/git.ignore
细心的小伙伴可能会发现 Springboot会自动生成 .ignore
文件 效果是一样的 且自动帮你设置了哪些东西要忽略 所以其实这个可做可不做 但是需要补充可以往里面加
6.2 git配置及初始化仓库
好了 准备工作已经做好 直接进入 idea 新建项目
需要在git里设置对应的运行程序
如果找不到 git目录的 可以输入 which git
找到对应的目录
初始化git仓库 选择当前项目
如果你发现其他文件都变红了 证明成功了 项目目录下也新增了 .git
文件夹
选择整个项目 加入暂存区就可以了 可以发现图标变绿了
6.3 提交代码
我再一连提交两次 可以在左下角git里看到相应的提交记录
因为是图形化界面 checkout revision
就可以切换对应的版本了
6.4 切换分支
如果不勾选 checkout branch 就不会切换到对应分支 这点需要注意
在hot-fix
里随便写点代码 提交下
可以看到 hot-fix
用用master里的所有历史提交记录 然后往后延伸 而对master是没有任何影响的
6.5 合并分支
热修复完成 我们需要将热修的分支合并到主分支 需要哪几步操作?
- 先切换到主分支
- 点击hot-fix 进行合并
对 其实就两步即可 注意 现在黄色的标签指向的是master
合并完成
6.6 冲突合并
但是 不是所有东西都是我们预想的那么好的
比如说 你在master上修改了代码 hotfix上也修改了代码 合并的时候并不是简单的增量操作
而是需要你自己选择 哪些进行合并 哪些进行舍弃
人为演示下冲突
首先master新增
hotfix新增代码
可以看到 最后一行是不一样的 我们需要进行手动合并
再次回到master分支 进行合并操作 会发生什么呢?
选择两个都加上 会发现有了新的提示 已经没有冲突了 我们点击合并
看分支图可以很明显的发现 代码合并成功
7. IDEA 集成 Github
7.1 idea里登陆github
这里直接跳转到我的浏览器 登录下就有了 如果没有跳转 就使用token
关于token怎么设置 点击跳转设置token
7.2 分享项目到 Github
因为有了插件 其实并不需要我们在 Github中再创建仓库 再克隆了 直接分享即可
如下所示
可以看到 github上有对应的仓库了
git相关的基本都写在这篇博文里了
最后需要强调一点
一个成熟的程序员 在对自己的代码进行修改前 一定要先同步下远程仓库 然后再新增 保证自己准备动手写的代码的前面部分 一定是远程库中有的 否则这个冲突就很难弄了
一个好的习惯就是 上班前 写 pull一下代码 再开始写
近万字的记录 还好坚持下来了 嘻嘻
无论对谁太过热情,就增加了不被珍惜的概率。倘若没有过度的欢喜,便不会有极度的悲伤。