学习git,看这一篇文章,稳妥学会!
git
一、安装和配置
(1):Git操作原因:
1:版本控制:就是记录若各干文件的变化,以便于查阅特定版本的修改
2:为什么要使用git:假如你修改了项目,然后发现思路不对,只能回归到之前的时间段,于是git可以帮你轻松恢复原先的样子
还可以查询,那个地方修改了,导致了bug的产生。
3;版本控制
01:集中式版本控制 svn
svn因为每一次存的都是差异,需要的硬盘空间相对来说较小,可是回滚的速度很慢
优点:代码存放在服务器上,便于项目管理
缺点:
服务器宕机:员工写的代码得不到保障
服务器炸了:丢失整个项目的历史记录
02:分布式版本控制系统 -git
git每一次存的是项目的完全快照,需要的硬盘空间相对来说较大
(只不过git团队对项目做了极致的压缩,最终使用的空间仅仅比svn多不了太多,但是git的回滚速度快)
(2):Git安装:
1:网址 — https://git-scm.com/download/win
2:双击exe安装包 一直next即可
3:检测是否安装了git – 在桌面右击 -出现git Bash here 等两个证明安装完成
注意点:直接右击点击 git Bash here --出现的终端是Linux操作系统
4:检测版本 — git --version —出现版本号,证明git装好了
(3):Git初始化和配置用户名:
1:git初始化配置: 配置直接的工作环境,配置只需要配置一次即可
01:初始化仓库:git init —对文件的备份
* 指令 : ls -a
查看是否存在 .git 文件夹
02:配置用户信息:
git config --global user.name=“用户名”
git config --global user.email=“邮箱”
配置后,输入检验直接的配置信息 git config --list 检测直接用户配置信息(user.email= user.name=)
(4)git生成的.git文件的介绍
初始化配置:git init (在工作区右键,点击git Bash here 终端 来初始化) —出现.git文件(也就是版本库)
在.git文件的目录是
01:hooks: 目录包含客户端或服务端的钩子脚本
02:info:包含一个全局性排除文件
03:logs:保存日志信息
04:objects:目录存储所有数据内容
05:refs:目录存储指向数据(分支)的提交对象的指针
06:config:文件包含项目特有的配置选项
07:description:显示对仓库的描述信息
08:HEAD:文件指示目前被检出的分支
09:index:文件保存暂存区信息
二、git的操作流程
本地仓库的操作
- 1:初始化仓库:
- git init
- 作用:就是在当前文件中,生成一个隐藏文件.git,里面用于存放备份的文件等
- 2:把代码存储在git仓库中:
-
01:先把文件放在git隐藏目录仓库的大门 (暂存区)
—git add ./readme.md(readme.md —这是自己的功能代码 ./对应的文件路径)
—git add ./ => 提交所有代码到暂存区! -
02:再把文件从git目标的门口拉入仓库房间 (版本库)
— git commit -m “备注消息” (commit—提交 -m—提交代码需要备注 “备注自己这一次 提交的说明的那些功能”)- 注意点:看到以下结果,代表我们提交到仓库已经成功了。
[master (root-commit) 3b67a01] 第一个功能 1 file changed, 1 insertion(+) create mode 100644 readme.md
- 注意点2:假如你输入的时候,忘记加了-m的时候,会进入到编辑器的界面
按下i —就可以书写代码了
退出:先按下esc —然后输入英文的符号 :q —若是出现红色警告的话就需要强制退出 — esc - :q! -回车
-
03:假如我们的第二个功能已经完成了,需要在一次提交代码;
1:git add ./文件 2:git commit -m “备注” 3:显示以下代码证明提交成功[master 0fbf56c] 这个时我们加的第二个功能 1 file changed, 2 insertions(+), 1 deletion(-)
-
操作本地服务器之拓展点
-
1:git status —查看当前文件的状态
- 00:On branch master —出现这两行代码,证明文件是干净的(已经提交到版本库了)
nothing to commit, working tree clean - 01:modified: readme.md modified-修改了这个文件,但是还没有提交,需要提交到版本库(git commit -m “”)
- 02:Untracked files: 无路径的文件(证明还没有添加到暂存区)
(use “git add …” to include in what will be committed)
- 00:On branch master —出现这两行代码,证明文件是干净的(已经提交到版本库了)
-
2:git add ./ —把当前目录的文件,都添加到暂存区(.git文件)==
-
3:git commit --all -m “这是直接从工作区提交到版本库” (不需要在添加到暂存区)==
-
4:git log 查看日志==
git log --oneline 查看日志 (以一段内容的形式显示每一次提交的备注)
git reflog — 查看提交的版本对于版本的处理,版本回退等(注意点:最好不要使用版本回退,不然若是其他人书写了代码,你版本回退,会造成彼此的代码都回退)
-
5:git reset --hard Head~0 (回退版本 - 0为最新的一个版本,1为距离最新版本的上一个版本)==
假如你之前提交了以下版本
c78ab6f 这是一次性操作
c6f8467 这是2
5057ce1 这个是文件2
0fbf56c 这个时我们加的第二个功能
3b67a01 第一个功能注意点1:输入 git reset --hard Head~1 回退到版本为:HEAD is now at c78ab6f 这是2 (证明你当前回退到了那个版本) 注意点2:输入 git reset --hard c6f8467 也是可以根据版本号,回退到该版本(怕版本太多,数不过来) 回退到版本为:HEAD is now at c78ab6f 这是2 (证明你当前回退到了那个版本) 但是回退到该版本后,在此之前的版本号则被隐藏了。
-
6:git reflog —回退的版本查询 (从下到上是最新到最旧的版本)
线上服务器的相关操作
首先先创建一个项目
链接:
然后根据你的需求,是使用http还有ssh的方式提交
这边选择的是http方式演示:
- 01:选择你需要提交的项目起源(也就是提交到哪里,而我这边是这个)
git remote add origin https://gitee.com/xzlwhy/git_test.git
- 001:需要测试你提交的服务器源地址:
git remote get-url origin
如果返回正确的地址则表示路径没有问题; - 002:当你路径设置错误的时候,可以重新设置回来:
git remote set-url origin 新路径
- 001:需要测试你提交的服务器源地址:
- 02:把本地仓库的代码push到远程的服务器
git push -u origin master
=> master为默认的主分支!
** 强制推送 :git push -f origin master
—会覆盖别人的版本,最后不要使用!** - 03:拉取服务器的代码
git pull origin master
线上服务器代码更改和你提交代码后,发生冲突,解决冲突的方式
- 假如你在线上更改了代码,还有你自己的代码添加了多一系列代码,那么你add commit push之后,会发生报错
- 原因:就是你本地仓库的版本不是最新的,因此你需要先拉去服务器的代码下来,然后在进行解决冲突合并
To https://gitee.com/xzlwhy/git_test.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'https://gitee.com/xzlwhy/git_test.git'
- 发现报错后,才知道本地服务器代码不是最新的版本,于是先拉取服务器的代码下来
01:git pull origin master
02: 拉取下来后,在你的文件之中,发生冲突的文件会以下面这种形式存在
附图:
解决方式:- 1:若是正确的代码,那么就保留彼此双方的代码 => 保留双方更改
- 2:若是恶意代码,那么仅仅保留自己的代码即可! => 采取当前更改(就是保留自己代码)
- 3:若是传入的代码是正确的,而你的代码是错误的,那么就选择采用传入的更改!
三:分支管理
默认有着主分支 — master
(1):创建分支
git branch dev (dev为分支的名称)
(2):切换分支
切换到自己创建的分支 (就是后面会显示分支的名称,比如dev,然后从分支回到主分支:把dev修改为 master)
假如你是以master主分支来创建新的分支,那么你拷贝的代码是以master的版本
假如你是以dev作为版本来创建新的分支,那么这个新的分支会以dev版本拷贝
git checkout dev
(3):查看有多少分支
git branch
(4):合并分支
git merge dev (merge---为合并的意思,把指定的分支合并到当前分支---就是有着*)
注意点:Updating 5995f00..e4543e0 显示这一行,代表已经更新完了。
+ 作用:在当前分支合并分支(假如你是master主分支需要合并dev分支,那么需要切换到master主分支 然后git merge dev)即可
(5):删除分支
git branch -d dev(要删除的分支名称)
注意点:就是你在分支dev做功能五的一半,然后在主分支中也完成了功能五的一半,各自提交了,然后才发现功能五没有合并在一起,
CONFLICT (content): Merge conflict in readme.md
Automatic merge failed; fix conflicts and then commit the result.
这时候合并的,会发生冲突的,造成合并失败,因此需要手动合并(需要把那些重复代码散去,并且再一次提交)。
<<<<<<< HEAD
我的功能四的代码,再加上分支就是完整的代码
=======
这是分支dev的代码1
>>>>>>> dev
所以啊:只要把其他的=== >>> dev注释等无用东西删除,再提交即可。
分支命名规范
- 项目项目-index (login)
分支的提交
注意点:在分支操作之后,我们也是需要提交所操作的文件git add ./
git commit -m "注释"
git push -u origin 分支名
多人开发的时候,灵活使用git
- 第一步: 下来仓库的代码
git clone https://gitee.com/GZ-2003/project-2003.git
- 第二步:进入文件夹 重启gitbash工具
- 第三步:更新本地代码后,还需要以下三个操作!
- git add -A 添加所有内容到暂存区
- git commit -m "1的代码" 提交代码到本地仓库
- git push -u origin master 把本地仓库的代码提交到线上仓库
四:上传服务器之(github)
(1):上传服务器的命令(GitHub)
就是代码的共享,把自己的功能代码模块上传到服务器上,然后也可以下载别人的代码到本地,运行整个项目
git push 链接 master
示例:git push https://github.com/xzlwhy/test.git master (push--推入 后面是服务器中https的链接 master-分支 服务器也是由分支的)
上传成功后,会在github上面显示你自己的备注和上传的代码。
git push origin master 推送
git pull origin master 拉取
(2):使用SSH的方式上传代码
公钥 和 私钥 两者是有关联的!
1:生成公钥,和私钥
ssh-****** -t rsa -C “邮箱”
C:\Users\Administrator.ssh
自己的用户名:就是cmd输入后,发觉是盘的Administrator .ssh里面有着三个文件
2:.ssh里面有着三个文件
公钥:id_rsa.pub文件
私钥:id_rsa文件
3:设置
01:把公钥的代码复制了
02:在github的右侧,点击+旁边的那个+(带着图片) —选择里面的Setting
03:然后进入里面后,点击SSH and GPG keys
04:在点击New SSH key
05:然后把公钥复制在key框框下,给自己起一个标题 my_window 然后点击Add SSH key
4:push代码带仓库里面
git push ssh地址(就是在选择克隆或下载那个绿色框框) master
(3):模拟两个开发的注意项
就是推送和拉取相关的操作
用户1:
用户1自己书写了代码后,提交到本地版本库后,并且上传到服务器。
用户2:
用户2:从服务器上面pull,用户1的版本下来保存在本地。
假如:用户1和用户2,各自修改了代码后,都提交到服务器,那么会造成代码的冲突啊!
也就是(error: Your local changes to the following files would be overwritten by merge:
index.html)
发送冲突后,需要自己手动在冲突的文件进行修改,删除掉那些提示的信息即可!
注意点:
两个用户在操作的服务器的时候,(再本地添加了)需要先pull拿到服务器的最新版本,然后在push上去,因为这样的话,你pull拿到服务器最新版本后,若是与本地的文件发送冲突后,会提示你做修改,解决冲突。然后解决冲突后,再把自己修改的代码推送上去。
在pull完后,若是进入编辑模式
做了一些备注后,按下esc :wq (w为保存 q为退出)
这是push和pull的简写方式
1:在本地项目中设置自己的服务器提交的起源(类似把地址设置为一个变量)
git remote add origin aaa@qq.com:xzlwhy/text1.git
设置后,我们在当前的项目中,拉去和推送都可以这样
git pull origin master
git push origin master
2:把分支设置为关联:
git push origin -u master (关联之后,-u就是把当前分支和指定的分支进行关联。
后面直接操作— git push —直接推送到设置的origin服务器地址)
上一篇: 23种设计模式之中介者模式
下一篇: 学会JavaScript这一篇就够了~