关于远程仓库你必须知道的:
什么是远程仓库
Git 远程仓库,简单来说,就是位于远程服务器上的代码仓库,它就像是一个 "云端基地" ,专门用来存储和管理我们的代码。我们可以把本地仓库中的代码推送到远程仓库,也可以从远程仓库拉取最新的代码到本地,实现代码的共享和协作。
从存储位置上看,本地仓库在我们自己的电脑里,就像我们的私人小抽屉,我们可以随时打开它进行操作,并且不需要联网也能工作。而远程仓库在远程服务器上,就像一个公共的大仓库,需要通过网络才能访问 ,这也是为什么我们前面几章的命令不需要联网也可以运行。
为何需要远程仓库?
既然远程仓库是一个"云端基地",那么我们可以很自然的想到他的一些作用:
- 协作沟通桥梁:在多人协同开发项目时,不同开发者可在各自的本地仓库中独立开展开发工作,完成阶段性任务后将代码推送到远程仓库,其他团队成员则从远程仓库拉取最新代码,实现代码的实时共享与同步。
- 备份安全保障:在软件开发进程中,本地电脑可能遭遇诸如硬盘损坏、系统崩溃等各类故障。而远程仓库相当于一个云端的备份,即便本地数据不幸丢失,凭借远程仓库,开发者也能轻松将代码恢复至其他设备,确保项目开发不受重大影响。
- 开源展示舞台:借助远程仓库,尤其是像 GitHub 这样的知名开源平台,开发者能够积极参与开源项目,将自己的代码作品展示给全球开发者社区。
拥有自己的远程仓库
讲了那么多,我们至今也没有一个自己的远程仓库,现在就让我们动手创建一个远程仓库。
本地与远程仓库初次建立连接的方法
与远程仓库建立连接的方法主要有两种:
方法 1:本地已有项目,关联远程仓库
-
将原有项目给转化成git仓库
csharpgit init
这个命令将会在该文件夹下生成一个
.git
目录,这是git的工作目录,也是我们判断一个一个目录是不是git仓库的一个标志。 -
添加远程仓库地址
csharpgit remote add origin 远程仓库的地址
用
git
命令,将远程仓库的地址添加到本地,并将其命名为origin。这里的origin是远程仓库的常用别名,方便后续在推送和拉取代码时进行引用。 -
首次推送代码:
cssgit push -u origin main
执行该命令会将本地main分支的代码推送到远程仓库,并自动设置本地分支与远程分支的关联关系。在此之后,进行推送和拉取代码操作时,可省略分支名,直接使用
git push
命令即可,简化操作流程。
方法 2:直接克隆远程仓库
若希望直接将远程仓库的代码完整复制到本地,可执行下面这个命令
bash
git clone 远程仓库地址
Git 会在本地创建一个与远程仓库完全一致的副本,包括所有分支及完整的提交历史记录,方便开发者在本地快速开展开发工作。我们也可以看到该目录下回自动生成一个 .git
仓库。
本地分支与远程分支的交互操作
本地仓库与远程仓库的交互主要有两种:拉取 和推送,通过这两个操作我们可以实现本地仓库与远程仓库的同步。
推送代码到远程:git push
- 在本地完成代码修改后,首先需执行
git add.
命令,将所有修改的文件添加到暂存区,准备提交。 - 使用
git commit -m ""
命令,提交修改并附上详细且有意义的提交说明,以便后续追溯和理解代码变更。 - 执行
git push
命令(此命令等同于git push origin main),将本地main分支的代码推送到远程仓库,实现本地代码与远程仓库的同步更新。
csharp
git add.
git commit -m "some comment"
git push
拉取远程更新:git pull
当团队成员更新了远程仓库的代码,你需要同步最新版本时,可执行 git pull
命令(等同于git pull origin main)。
git pull
相当于 git fetch
+ git merge
git pull
命令的内在原理是先执行 git fetch
命令,从远程仓库下载最新的代码更新,然后执行 git merge
命令,将下载的更新合并到本地当前分支。通过这一系列操作,确保本地代码与远程仓库的最新状态保持一致。
实践:模拟多人协作:冲突的产生与解决
步骤1:准备工作:
首先准备两个本地分支 deva
和 devb
来分别模拟两个开发者的本地分支。
步骤 2:制造冲突
- 开发者 A 的操作 :开发者 A 对
diary-2025.md
文件进行修改,内容如下:
# hello deva
修改完成后,执行 git add. && git commit -m "A更新日记"
命令提交修改,并使用 git push origin HEAD:master
命令将代码推送到远程仓库,完成自己的代码更新操作。
这里介绍一下
git push origin HEAD:master
命令,origin
是远程仓库的名字,HEAD指向的是当前的本地分支,也就是deva
,master
指的是想要推的远程分支的名字
- 开发者 B 的操作 :开发者 B 在未执行
git pull
命令获取最新代码的情况下,直接对diary-2025.md
文件的同一行进行修改,内容为:# hello devb
当开发者 B 执行 git push
命令尝试推送代码时,将会收到报错提示,告知远程仓库存在本地未合并的修改,无法直接推送。
步骤 2:解决冲突
- 拉取远程代码:开发者 B 在得知冲突后,执行git pull命令,此时系统会明确提示冲突(CONFLICT),表明本地代码与远程代码存在不一致,需要进行冲突解决。
- 手动解决冲突 :开发者 B 打开冲突文件
diary-2024.md
,文件中冲突部分会以如下格式显示:
开发者 B 需根据实际业务需求,手动仔细选择保留的内容。例如,经过思考后将其修改为:
# 今天和团队一起学习了远程仓库操作!
- 重新提交并推送:完成冲突解决并修改文件后,执行git add.命令将修改后的文件添加到暂存区,接着使用git commit -m "解决冲突:合并A和B的修改"命令提交解决冲突的操作记录,最后执行git push命令,将最终整合后的代码推送到远程仓库,完成整个冲突解决流程。