1. 安装
1.1 官网
1.2 安装
修改图示此处,其余默认设置即可
安装完成,桌面上右键点击Git Bash Here进入命令界面
2. Git本地结构
3. 代码托管中心
3.1 团队内协作
3.2 团队间协作
4. Git使用
4.1 设置字符编码
桌面右键进入Git Bash Here
右键窗口->options->text->character set->UTF-8
4.2 常用命令
-
查看版本
git --version
-
清屏
clear
-
设置签名
git config --global user.name "zhangsan" git config --global user.email "zhangsan@163.com"
-
初始化仓库 (随便找个目录新建仓库目录repository,再cd命令切换到仓库目录执行命令)
cd D:/java/Git/repository/ git init
-
查看.git目录
初始化完成后会生成.git文件夹,是一个隐藏文件夹,将其显示后,先cd切换到 .git 目录,或者直接在.git目录中右键进入bash,再执行 ll 命令cd D:/java/Git/Git/repositer/.git ll
- 提交文件
- 添加到暂存区
git add Demo.txt
- 提交到本地库, -m是说后面要跟这个文件的描述信息
git commit -m "第一次提交文件Demo.txt" Demo.txt
- 注意:必须将文件放在仓库中,并cd切换到仓库目录,才能添加和提交
- 添加到暂存区
- 查看状态
git status
- 在上述Demo.txt提交完后
- 对Demo.txt进行修改后,提示添加提交
- 再次添加Demo.txt到暂存区后,红色变为绿色并提示提交到本地仓库
- 提交到本地仓库后,显示文件修改行数,查看状态无需提交
- 新建文件,查看状态,显示红色需要添加和提交
- 查看日志
git log git log --pretty=oneline git --oneline git reflog
- 查看详细日志信息
git log
- 当日志信息太多时,一页无法完全展示,此时会自动分页,分页的标志是左下角会出现冒号,在冒号处敲击: 空格:下一页,b:上一页,q:退出。当到达最后一页时,冒号变为[END]
- 历史记录太多,分页不方便查看,使用命令查看简洁日志信息
简洁日志信息git log --pretty=oneline
简洁索引日志信息git log --oneline
简洁索引显示回退步数git reflog
- 查看详细日志信息
- 回退版本
git reset --hard 某版本对应索引
- 使用 git reflog 命令找到要回退的版本的索引
当前文件内容 - git reset --hard a567887回退到刚插入aaa的版本
此时文件Demo3.txt内容
反悔了,还想回到ccc的版本,则同上找到ccc版本对应索引,使用命令回退即可 - git reset --hard xxxx命令中,hard代表当仓库指针移动时,暂存区和工作区同步重置
git reset --mixed xxx命令中,mixed代表仓库指针移动时,暂存区重置,工作区不动
git reset --soft xxxx命令中,soft代表仓库指针移动的时候,暂存区和工作区都不动
后两种使用较少
- 使用 git reflog 命令找到要回退的版本的索引
- 删除文件及找回
- 删除工作区文件Demo4.txt
rm Demo4.txt
- 同步到暂存区和本地仓库(仓库中只是回退了索引而未实际删除)
git add Demo4.txt git commit -m "删除Demo4.txt" Demo4.txt
- 找回文件只需回退版本到删除前即可
git reset --hard b689f46
- 删除工作区文件Demo4.txt只同步删除到暂存区(respository目录下属于工作区)
rm Demo4.txt git add Demo4.txt
- 找回文件,本地仓库并没有受到影响,但仍然可以借用仓库的回退到删除前的版本来实现工作区和暂存区的文件恢复,尽管本地仓库似乎没有变化,但其他区却恢复了
由于只需要回滚到当前指针的索引,所以除了指名道姓索引值外,也可以用HEAD实现git reset --hard b689f46 git reset --hard HEAD
- 删除工作区文件Demo4.txt
- 比较文件差异
git diff (工作区与暂存区所有文件差异) git diff 文件名 (工作区与暂存区某一文件差异) git diff 某版本索引 (工作区与本地库中某版本所有文件差异) git diff 某版本索引 文件名 (工作区与本地库中某版本某一文件差异) git diff HEAD (工作区与本地库最新版本所有文件差异) git diff HEAD 文件名 (工作区与本地库中最新版本某一文件差异) git diff --cached (暂存区与本地库最新版本所有文件差异) (注意:暂存区为空时,git diff和git diff 文件名是比较工作区和本地库最新版文件差异)
- git diff 文件名,比较文件在工作区和暂存区的差异
- git diff,比较工作区和暂存区所有文件差异
- git diff 文件名,比较文件在工作区和暂存区的差异
- 占位
4.3 分支
4.3.1 分支介绍
分支相当于流水线工作,多条线路齐头并进,总体还是为主干服务。多人协作时,修改一点就加入版本中,容易发生多人等待,合并冲突,产生很多bug等问题,不如各自复制拿回一个版本(每个人成为一个分支),以此版本为基石进行某一功能开发,不断修复问题,更新小版本,最终完成此功能,然后合并到主版本中去。
使用多个分支并行开发功能,大大提升了开发效率;
分支之间互不影响,即便有分支开发失败也不影响其他分支;
4.3.2 分支操作
- 查看分支
git branch -v
- 创建新分支
git branch 分支名 git checkout 分支名 (两语句等效)
- 切换分支
git switch 分支名 (切换到某分支) git checkout 分支名 (切换到某分支) git switch -c 分支名 (创建某分支,再切换到此分支,已存在则失败) git checkout -b 分支名 (创建某分支,再切换到此分支,已存在则失败) (两两等效)
- 合并分支(分支冲突)
git merge 分支名
- 例如要合并 master分支与branch01分支;背景:在master分支时修改Demo4.xml第一行为aaa并提交,切换到branch01分支时修改Demo04.xml第一行为bbb并提交
- 先切换到master分支,再执行git merge branch01合并命令
- 解决冲突,人为决定如何处理冲突,包括删除某一分支文件某些内容,进行内容上下合并等,修改完文件再次进行 add和commit
提交成功则变回单分支正常状态
5 远程仓库交互
5.1 管理员管理远程仓库
- 官网 GitHub: Where the world builds software · GitHub
- 注册并创建仓库,仓库名尽量和本地仓库名一致
- 给远程仓库起别名
git remote add 别名 远程仓库链接 (给远程仓库起别名) git remote -v (查看别名)
- 添加远程仓库别名
- 查看别名
- 上传文件push
git push 别名 分支
- 将本地仓库文件上传到远程仓库
- 出现异常,排查
- 进入dos窗口尝试ping github.com,若无法连接主机,则配置hosts文件,添加
[140.82.114.3 github.com],去掉中括号,ip可能会变,去下面网站查询即可https://www.ipaddress.com/https://www.ipaddress.com/ - 坚持报错的话,尝试解除SSL验证
git config --global http.sslVerify “false”
- 顽强报错,尝试取消代理
git config --global --unset http.proxy #取消http代理 git config --global --unset https.proxy #取消https代理
- 进入dos窗口尝试ping github.com,若无法连接主机,则配置hosts文件,添加
- 将本地仓库文件上传到远程仓库
- 下载文件pull,当有人提交修改远程仓库后,管理员可以拉取文件到本地
- 直接拉取
git pull 别名 分支名
- 分步拉取
git fetch 别名 master (拉取远程库主分支内容) git checkout 别名/master (切换到远程库主分支,再使用ll查看文件列表, cat Demo.txt查看文件内容 等,主要查看远 程库主分支内容是否正确) git checkout master (切换到本地库主分支) git merge 别名/master (合并本地库与远程库拉取到的内容)
- 直接拉取
5.2 用户本地仓库与远程仓库交互
- 拉取远程仓库内容,clone
找一个文件夹用于存储仓库文件,clone会自动创建本地仓库,并给远程仓库起别名
- 上传文件,push
直接git push origin master可以直接提交,这是因为之前用此电脑使用管理员的账号密码进行了push,电脑中缓存有管理员账号密码,走了缓存。在控制面板,管理windows凭据中,将github.com保留的账号密码删除,则此时提交会验证账号密码,即使验证通过也无法提交成功,需先加入团队,加入团队成功后即可上传git push 别名 master
- 加入团队
- 管理员生成邀请链接
根据用户名等搜索添加,在邀请列表中选中添加用户,之后复制邀请链接 - 用户登录账号,找到消息,接受邀请加入即可
或者登录账号,直接导航栏粘贴管理员的邀请链接,也可直接加入 - 加入后即可进行push等操作
- 管理员生成邀请链接
5.3 远程仓库冲突问题
当用户修改完某文件某行并提交远程仓库后,若管理员在没有拉取的前提下也对本地库的此文件此行做了修改,则管理员提交时会发生冲突而无法提交(用一台电脑模拟用户和管理员时,每次切换窗口提交前都要切换账号,清除windows凭据中关于github.com账号密码的缓存)
解决:先将远程仓库内容拉到本地,对文件进行审查修改,再次上传即可
git pull 远程仓库别名 分支名
文件根据需求进行修改
提交上传
git add Test1.txt (添加到暂存区)
git commit "提交发生冲突admin进行修改" (提交到本地库,解决冲突时提交不加文件名)
git push 别名 分支名 (提交到远程仓库)
6 跨公司交互
1. A公司管理员分享仓库链接
2. B公司员工登录账号,导航栏直接粘贴A链接,fork仓库到自己账号
3. B员工将自己账号fork的仓库clone到本地仓库
新建一个文件夹BGit作为新仓库的位置,在BGit中右键进入bash,执行clone命令
git clone 链接
4. B员工操作仓库并提交到远程仓库
cd切换到clone创建的新仓库中,创建新文件BTest.txt,执行添加到暂存区,提交到本地仓库
提交到自己的远程仓库
git add BTest.txt
git commit -m "B员工悄咪咪添加了BTest.txt" BTest.txt
git push origin master
5. B公司员工进行Pull requests,请求提交到A公司仓库
6. A公司管理员接收请求
切换到A管理员账号,并进入仓库,找到Pull requests,看到B公司员工发送的请求,点进去处理
7. 合并完成,A公司员工即可正常执行各项操作
7 免密操作
1. 切换到用户主目录
cd ~
2. 创建.ssh目录
ssh-keygen -t rsa -C github账号对应邮箱
输入后一直敲回车即可
3.
进入.ssh目录,记事本打开文件id_rsa.pub,并复制里面内容
登录github账号,点击头像,找到Settings,进去找到SSH,新建SSH key
随便起一个Title,Key中粘贴刚复制id_rsa.pub的内容,点击Add SSH key
添加完成后,出现此标志,即为添加成功,此后提交到此账号则不需账号密码验证
8 idea集成Git
idea本地库操作
1. idea新建一个项目,进入到 File->Settings->Version Control->Git
2. 初始化本地仓库
这里选择了本项目目录作为本地仓库,也可选择其他的目录
3. 提交文件
点击add后文件会变色,点击commit后,选择提交的文件,添加描述信息,点击提交,完成后文件会变为绿色
将整个项目提交,在项目目录上右键提交,选中整个项目,提交,则整个项目的目录结构变绿
新建java文件时,提示是否添加到Git暂存区,根据需求决定是否添加
对已经提交的文件进行修改,修改的那行前方会有标志,再次提交后消失
修改过后再次右键文件提交,则出现修改前后对比
Git相关日志等
idea远程仓库交互
1. 先将远程仓库pull下来
找到项目仓库,右键进入bash,执行pull操作,在2.9.2版本后,需要添加后缀参数来允许不相关的历史合并
git remote add webrep 远程仓库链接 (起别名,别名只在当前本地仓库生效)
git pull webrep master --allow-unrelated-histories (拉取远程仓库的master分支,
允许不相关的历史合并)
pull过程中出现填写提交信息,输入i开始填写,填写完成Esc结束,输入 :wq 保存退出编辑界面
2. 再将本地库上传到远程仓库
git push -u webrep master -f
3. idea中的push操作,右键文件,点击Git,push进入上传界面
不推荐Commit and Push操作,Push前一般会先pull拉取文件到本地仓库对比,如果没有pull操作直接push的话,可能出现远程仓库冲突发生(其他人修改了某文件某行提交了,我又修改了某文件某行,直接提交了,此时就会发生冲突)
建议
idea克隆远程仓库项目
克隆出来的项目,既是一个项目,又是一个仓库
idea对远程仓库冲突解决
如果A修改了某文件某行提交了,B使用idea也修改了此文件某行,则B提交时远程仓库发生冲突
点击Merge进行合并操作,修改合并冲突文件,之后再提交即可,最好在push前先pull拉取进行对比,即可避免出现冲突
学习的赵老师的课记的笔记,有很多不足的地方,如有不对,还请指正