持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第24天,点击查看活动详情
分支
分支就是当前项目的一个副本(可以理解为把当前项目复制了一份,可以这样理解,但是要知道内部实现并非如此)。
初始化之后,默认是在master分支上进行操作的,master分支也叫做主分支。
实际开发中,正规的公司,都不允许直接在master分支上开发。需要创建分支,在分支上开发,最后将代码合并回master。
分支常用命令
# 查看所有本地分支
git branch
# 创建新分支
git branch 分支名
# 比如,创建一个叫做login的分支
git branch login
# 切换分支
git checkout 分支名
# 比如,切换到login分支
git checkout login
# 比如,切换到master分支
git checkout master
# 创建并直接切换分支
git checkout -b 分支名
使用:
- 创建并切换到dev分支上;在dev分支上,写点代码,提交一下。
- 切换分支,查看两个分支的不同。
切换分支之前,必须把当前分支的代码全部提交到仓库。
合并分支
特点:一个分支包含另一个分支的全部提交记录。
如果需要把dev分支的代码合并到master分支
- 切换到master
- 执行
git merge add,即可把add分支的代码合并到master
合并之后,add和master分支的代码就回一样了。
合并提示
-
两个分支,比如是master和dev,特点是都有新的提交
-
也就是说,一个分支不包括另一个分支的全部提交记录
-
这种模式的合并,有可能会有冲突
-
合并方法,和前面一样
-
假设把dev的代码合并到master分支,切换到master
git checkout master -
执行
git merge dev,表示将dev分支的代码合并到当前(master)分支 -
然后就会出现如下两个画面中的一种
- 画面一:两个分支修改的代码不在同一个文件的同一行代码,出现下面的画面。
- 画面二:两个分支修改了同一个文件的同一行代码,出现下面的画面。
-
出现上述画面一,表示已经合并完成了,但是需要提交一次;
出现的框是让我们输入提交说明;
需要执行下面的操作:
- 按
i,进入 “插入” 模式,就可以对画面中的文字进行修改了(直接输入也行) - 按 “上下左右” 键,调整光标的位置,可以删除里面的内容,写自己的提交说明
- 上述画面中的
# Please enter.....表示注释,可以不用理会 - 按
Esc键,退出 “插入” 模式 - 直接输入 “
:wq”,退出这个画面,从而完成合并。(一定是英文的冒号)
出现上述画面二,表示正在合并中,但是遇到冲突了;
需要在代码中解决掉冲突,然后保存代码;
最后,需要提交一次;
具体做法:
- 打开有冲突的文件
- 去掉分割线,保存代码,表示解决了冲突
- 保存代码,执行
git add .和git commit -m '提交说明'从而完成这个合并。
远程仓库
注册码云或github账号
码云和github都提供仓库的托管服务。
区别是码云是国内的服务器,打开速度较快;github是国外的服务器,打开速度不能保证。
码云:gitee.com/
github:github.com/
自行去这两个网站注册账号,最好使用相同的邮箱 分别到码云和github上注册账号。
如果你不会在Github上注册,没关系,上课的时候,老师演示。
配置码云或github的SSH秘钥
我们向码云或github网站推送代码的时候,最好使用SSH的方案,这个方案需要提前配置好秘钥。下面是具体的配置方法。
任何文件夹位置,空白处右键,选择右键菜单中的 “Git Bash Here”,执行下面的命令,可以生成SSH秘钥(包含一个公钥一个私钥)
ssh-keygen -t rsa -C "你的邮箱地址"
# 比如
ssh-keygen -t rsa -C "tangfengpo@163.com"
# 执行完这个命令之后,后面有一些询问,我们直接一路回车即可
注意,回车执行命令,然后继续回车,回车....直至生成完毕~
最后生成的秘钥在:
Windows:
C:\Users\用户名.ssh
mac:
你的用户名那个文件夹中。 按shift+Commend+. 可以显示隐藏文件,然后就可以看到 .ssh文件夹了
找到 .ssh/id_rsa.pub,用vscode打开,复制里面全部的内容,配置到远程仓库,做法如下:
- GitHub右上角的三角号
- Settings
- 左侧有 SSH and GPG keys
- 在显示的界面中,点击右上角的 New SSH key,然后完成添加公钥操作
- 码云的配置方式和Github一样。
创建远程仓库
-
码云
- 右上角的 “+” ,选择新建仓库
- 填写仓库名,选择公开
- 点击创建按钮,创建。
-
github
- 右上角的 “+” ,选择 “New repository”
- 填写仓库名称
- 点击创建按钮,创建。
推送代码到远程【首次】
- 进入本地项目文件夹,右键 --> Git Bash Here,打开终端窗口。
- 远程仓库地址有两个(https、ssh地址),一定要选择ssh地址。
- 添加远程仓库地址(
git remote add 远程仓库地址别名 完整的远程仓库SSH地址) - 首次推送代码到远程仓库(
git push -u origin master)
只能把本地仓库的代码推送到远程仓库;不能把工作区的、暂存区的代码推到远程。
确保你的本地仓库有内容,别推送空的本地仓库。注意是本地仓库,不是工作区。
首次使用SSH,会出现如下画面,输入 “yes”,回车即可。后面就不会再有了。
再次及后续推送
- 工作区编写代码
- 执行 add 命令,将代码添加到暂存区
- 执行 commit 命令,将代码提交到本地仓库。(因为只有本地仓库的代码才能推送到远程)
- 执行
git push命令,将这次改动推送到远程仓库。
常见问题
-
执行完“git remote add origin ssh地址”报错:fatal:remote origin already exists.
- 叫做 origin 的远程地址以及存在了。不能再使用这个名字了。
- 执行
git remote -v查看所有的远程地址。 - 可以选择性的 删除 远程地址。执行
git remote remove 别名,比如git remote remove origin
-
首次推送的时候,提示输入账号密码
- 因为添加远程地址的时候,填错了,填成了 https 地址了。应该换成 ssh 地址。
- 可以选择改过来,也可以使用https地址。下次做项目,再使用ssh地址也可以。
git remote add 那里,地址复制错了,能改吗?
# 查看所有可用的源(可用的远程地址)
git remote -v
# 删除一个源
git remote remove 远程仓库地址别名
# 然后重新添加新的地址
git remote add 远程仓库地址别名 SSH地址
我电脑上有两个本地项目(仓库),能推送到一个远程仓库吗?
没人这么干!两个项目放一起,会出现混乱或者覆盖的呀!
推送总是不成功?
- 检查一下SSH秘钥配置好了吗
- 看看什么错误,直接把前因后果告诉老师吧~~~
- 实在不行,重新创建一个仓库试试,从头再来。
多人协作
管理员角色
-
创建远程仓库 或 创建本地仓库之后推送到远程仓库
- 初始化一个项目,
git init - 添加初始的代码到暂存区
git add . - 提交初始的代码到本地仓库
git commit -m "提交了初始的代码"
- 初始化一个项目,
-
推送到远程仓库
git remote add origin SSH地址git push -u origin master
-
邀请成员
-
开发(add / commit / pull / push)
- 编辑自己的代码
- 把修改后的代码,添加到暂存区
git add . - 把修改后的代码,推送到本地仓库
git commit -m "xxx" - 如果有人在你之前推送了,则推送之前需要先拉取,将拉取下来的代码和你的代码合并
git pull origin master - 合并如果有冲突,需要解决冲突,别忘记提交一次
- 最后推送
git push origin master
成员角色
-
同意邀请
-
克隆项目到本地(注意路径)
- 执行
git clone SSH地址,将项目克隆到本地。然后关闭黑窗口。 - 进入项目文件夹,重新
git Bash Here打开黑窗口,这样可以保证路径正确。
- 执行
-
开发(add / commit / pull / push)
- 编辑自己的代码
- 把修改后的代码,添加到暂存区
git add . - 把修改后的代码,推送到本地仓库
git commit -m "xxx" - 如果有人在你之前推送了,则推送之前需要先拉取,将拉取下来的代码和你的代码合并
git pull origin master - 合并如果有冲突,需要解决冲突,别忘记提交一次
- 最后推送
git push origin master
分支和远程相关命令
查看远程分支
git remote show 仓库别名
# 比如,查看一个叫做码云的远程仓库的分支
git remote show origin
跟踪分支
跟踪分支就是把远程仓库的分支下载到本地
git checkout 远程分支名
# 比如有个远程分支,叫做user,把他下载到本地也叫做user
git checkout user
Git忽略
在项目中,创建 .gitignore 文件,它就是git的忽略文件,记录了哪些文件不被Git管理。
如果有的文件已经被Git管理了,而又想设置为忽略文件,则需要使用 git rm --cached 文件 将文件从仓库中移除才有效。
被成功忽略的文件,不会被添加到暂存区,不会被提交到本地仓库,不会被推送到远程仓库。这就是忽略的意思。
# 展示 .gitignore 的写法
# 忽略当前目录中的 test 文件夹
/test
# 忽略任何目录中的 test 文件夹
test/
# 忽略任何目录中的 png 图片
/**/*.png
最后是原图(●'◡'●)