Git 指令深入浅出【3】—— 远程仓库
- 一、远程仓库
- (一)基本指令
- 1. 配置 SSH 密钥
- 2. 推送远程仓库
- 其他分支推送远程仓库
- 方法1
- 方法2
- 建立分支链接
- 方法3
- 3. 合并分支请求
- (二).gitignore 忽略文件
- (三)标签管理
- 二、多人协作实战
- 异分支开发
一、远程仓库
先在 Gitee 或 GitHub 上新建一个仓库。
完成创建之后,大家会注意到有 Pull Request 这么一栏,Pull Request 的作用就是:合并分支申请。在企业中,项目代码需要经过测试的验证,上级的确认,最后才能合并到master
分支(或者其他分支)中,并不是直接就能合并分支。鲁莽的举动会污染master
分支(污染了也能回退)。
(一)基本指令
# 克隆远程仓库
git clone https:// # 此处先选择 HTTPS 方式克隆
查看远程仓库名
cd <warehouseName>
git remotegit remote -v # 更详细的信息
# fetch 是拉取,表示本地有拉取权限
# push 是推送,表示能够从本地推送到远程仓库
1. 配置 SSH 密钥
如果有朋友在没有配置公钥的情况下直接使用了SSH
的方式克隆,可能会报下图所示的错误。
、
那么我们应该如何设置公钥呢?步骤如下图所示,首先是在 Gitee 或 GitHub 中找到添加公钥的位置,标题可以自己起一个,比如:TestPublicKey
。
接着填写公钥部分,这时候需要在服务器上先找找是否有id_rsa
和id_rsa.pub
这两个文件,前者是私钥,切莫泄露给其他人;后者是公钥,有的话直接填入即可。
# 查找公钥
cd ~
ls -a
cd .ssh
ls -a
此处我们并没有看到id_rsa.pub
文件,因此需要我们设置公钥。
ssh-keygen -t rsa -C "--------@qq.com" # 此处的邮箱必须与 Gitee 上邮箱管理的邮箱一致!# ssh-keygen:用于生成、管理和转换认证密钥的工具
# -t rsa: 指定了要生成的密钥类型是RSA。RSA是一种常用的公钥加密算法。
# -C:表示提供一个注释。这个注释用于识别这个密钥,通常用于标识密钥的所有者或记录附加信息。
# 查看公钥
cd .ssh
ls
cat id_rsa.pub # 将公钥粘贴到 Gitee 上
# 使用 SSH 克隆仓库
git clone git@gitee.com:LLL-zxx/Learning-Java.git# 完成克隆之后需要配置 user.name 与 user.email
配置 user.name
与 user.email
见 Git 指令深入浅出【1】—— 文件管理
2. 推送远程仓库
git branch -a # 所有分支
git branch -r # 远程分支
touch test
vim test # 随便写
git add test
git commit -m "测试从 本地仓库推送文件 至 远程仓库"
git push
其他分支推送远程仓库
如果本地推送的分支(test)在远程不存在,显示的并不是推送成功,而是“一切都更新到最新状态”,我们在远程分支上也不能看到最新的内容。解决办法有三个:
- 创建对应远程分支再推送
- 直接推送到远程仓库(含 创建远程分支)
- 直接创建本地分支 与 远程分支,并建立链接
方法1
笔者先演示一下方法1:手动创建对应远程分支再推送
第一步自然是在 Gitee 或 GitHub 上创建新分支,但是创建完之后是无法理解查看到的。因为本地的不能更远程实时同步,需要拉取远程的最新内容
# 拉取远程最新内容
git branch -a
git pull # 拉取新创建的远程分支
git branch -a
当我们尝试将本地的文件推送上去的时候仍然会报错,这是因为当前分支落后于远程分支,需要先拉取远程分支的内容完成同步才能推送。
ls -a
git add testBranch
git commit -m "推送到指定远程分支"
git push
# 拉取+合并分支的内容
git pull <remote> <localBranch> <remoteBranch> # 分支未链接(名字相同后者可省略)
git add testBranch
git commit -m "推送到指定远程分支"
git push
方法2
# 方法2:直接推送到远程仓库
git checkout -b testBranch2
vim testBranch
git add testBranch
git commit -m "直接推送到远程仓库"
git push <remote> <branchName> # 含创建新远程分支
建立分支链接
上面两个方法挺好用的,但却都存在后患:本地分支和远程分支是没有链接的,即能够正常推送push
却无法拉取pull
**。**当然,这只是针对新建分支而已,master
分支是系统已经建立链接。
git pull
# 查看本地与远程分支的链接
git branch -vv
# 显示sha1并提交每个头部的主题行,以及与上游分支的关系(如果有的话)
尽管给出了两个办法,但是咱们还是使用后者(相对来说是一劳永逸)
# 建立本地分支与远程分支的链接
git branch --set-upstream-to=<remote>/<branch> <localBranch>
方法3
# 方法3:创建分支并建立链接
git checkout -b <localBranch> <remote>/<remoteBranch> # 注意,远程分支需要已经存在!
3. 合并分支请求
(二).gitignore 忽略文件
如果想推送某个确定的文件,但该文件确属于忽略文件,应该怎么写呢?有两个办法:
方法1:直接将特定文件写入 忽略文件
git add -f a.so
git check-ignorge -v a.so
(三)标签管理
标签tag
,可以简单的理解为是对某次commit
的一个标识,相当于起了一个别名。
例如,在项目发布某个版本的时候,针对最后一次commit
起一个v1.0
这样的标签来标识里程碑的意义。这有什么用呢?相较于难以记住的commit id
,tag
很好的解决这个问题,因为tag
一定要给一个让人容易记住,且有意义的名字。当我们需要回退到某个重要版本时,直接使用标签就能很快定位到。
# 打标签
git tag v1.0 # 给最新的提交打标签
git tag v0.9 '序列化ID' # 对历史提交打标签git tag -a v0.8 -m "给标签添加描述" '序列化ID'
# 查看标签及其信息
git tag # 根据英文单词排序,而不是时间cat .git/refs/tags/v1.0 # tree .git ---> refs -- tag
git cat-file -p '序列化ID'git show <版本号># 查看远程标签
git ls-remote --tags
# 推送标签
git push origin v1.0
git push origin --tags # 推送全部标签
# 删除标签
git tag -d <tagName>
git tag -f -d <tagName> # 强制删除# 删除远程标签
git push origin :<tagName> # 删除本地及远程的标签
git push origin :refs/tags/<tagName>
二、多人协作实战
异分支开发
场景:两位开发者各自在自己的分支上开发。B开发突然生病,需要A开发帮助B开发完成开发任务。B开发病愈回来继续完成自己的开发工作。
# 阶段一:A开发
git checkout master
git pull # 获取最新版本代码
git checkout -b feature-a
vim function1
git add function1
git commit -m "阶段一:A开发 推送"
git push # error
git push origin feature-a # <remote> <branchName> 若远程分支不存在将新建git merge --no-ff -m "merge master" master # 没有冲突-合并成功git checkout master
git merge --no-ff -m "merge feature-a" feature-a
# 阶段一:B开发
git checkout master
git pull # A开发已经提交,master版本已经领先
git checkout -b feature-b
vim function2
git add function2
git commit -m "阶段一:B开发 推送"
git push # error
git push origin feature-b # 本地与远程分支未建立链接(可push,不可pull)
# 阶段二:A开发 帮助 B开发 完成任务
git branch -a
git pull
git checkout -b feature-b origin/feature-b
vim function2
git add function2
git commit -m "阶段二:A开发 帮助 B开发 完成任务"
git push
# 阶段三:B开发继续完成开发任务
git pull # error:feature-b 未建立链接
git branch -vv # 查看是否有链接(未链接)
git branch --set-upstream-to = origin/feature-b feature-b # 手动建立链接
git pull
vim function2
git add function2
git commit -m "阶段三:B开发继续完成开发任务"
git pushgit merge master # 有冲突就解决
git add .
git commit -m "解决冲突"git checkout master
git merge --no-ff -m "merge feature-b" feature-b