Git【远程操作】

在学本地操作时,我们的代码只存在自己的电脑上。但实际开发中,你可能需要和同事协作,或者担心电脑坏了代码丢失------ 远程仓库就是为解决这些问题而生的。Git远程管理,不仅能管理自己的代码,还能和团队一起高效协作。


一、理解分布式版本控制系统

我们目前锁说的所有内容(工作区、暂存区、版本库等等),都是在本地!!!也就是在你的笔记本或者计算机上 。 而我们的Git其实是分布式版本控制系统

可以理解为,我们每个人的电脑上都是一个完整的版本库 ,这样你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人的电脑上都有一个完整的版本库,那么多人如何协作,比方说,自己电脑上改了文件A,你的同事也在他的电脑上改了文件A , 此时,你们两之间,只需要把各自的推送给对方,就可以互相看到对方的修改了!!!

  • Git和我们之前用过的SVN有什么不同?
  • 集中式版本控制系统(如SVN) :有一个中央服务器,所有人从中央服务器获取代码,修改后再提交到中央服务器。如果中央服务器宕机,所有人都无法工作,并且一旦服务器数据丢失,整个项目的历史就全没了。

  • 分布式版本控制系统(如Git)每个人的电脑上都有一个完整的版本库。你可以离线工作,随时提交。当需要协作时,只需要把自己的修改推送给对方,或者从对方那里拉取修改。

  • 分布式版本控制系统的安全性要高得多 , 因为每个人电脑都有完整的版本库,某一个人的电脑坏了不要紧,随便从其他人哪里复制一个就可以了~
  • 在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本的修改,因为为可能你们不在同一个局域网内 , 两台电脑互相访问不了。也可能今天你的同事病了,他的电脑压根没有开机。因此,分布式版本控制系统通常也有⼀台充当"中央服务器"的电脑,但这个服务器的作用仅仅 是用来方便"交换"大家的修改,没有它大家也⼀样干活,只是交换修改不⽅便而已
  • 有了这个"中央服务器"的电脑,这样就不怕本地出现什么故障了(比如运气差,硬盘坏了,上面的所有东西全部丢失,包括git的所有内容)

二、远程仓库

2.1 为什么需要远程仓库?

  • 备份代码:防止本地硬盘损坏导致代码丢失。

  • 团队协作:多人可以基于同一个代码库并行开发,互相分享代码。

  • 代码托管:方便在任何地方获取最新代码。

2.2 选择远程仓库平台

目前主流的Git代码托管平台有:

  • GitHub:国外平台,全球最大开源社区。

  • Gitee(码云):国内平台,速度快,对中文用户友好。

  • GitLab:支持私有部署,企业常用。

本文以Gitee为例进行讲解。

2.3 新建远程仓库

https://github.com/ 比较慢 , https://gitee.com/ 用这个做演示

  • 新建仓库
  • 填写基本信息
  • 创建成功
  • 创建成功后,我们可以对远程仓库进行一个基本的设置:开源or私有
  • 从创建好的远程仓库中我们便能看到,之前在本地学习过的分支,也存在于远程仓库中并被管理起来 了。刚创建的仓库有且只有一个默认的master分支。

三、克隆远程仓库到本地

仓库创建好后,我们需要把它"拉取"到本地,才能开始写代码。

获取仓库地址

在你的远程仓库页面,点击"克隆/下载"按钮,会看到两种地址:

  • HTTPS:需要每次输入账号密码。

  • SSH:配置好密钥后,无需重复输入密码,更推荐使用。

这里我们选择SSH方式。

克隆/下载远端仓库到本地 , 需要使用 git clone 命令, 后面跟上我们的远端仓库的链接 。 远端仓库的链接可以从仓库中找到:选择 "克隆 / 下载 " , 获取远程仓库链接

3.1 HTTPS

  • 执行 git remote 后,输出当前本地仓库关联的远程仓库简称:origin
  • 执行 git remote -v-v--verbose 的缩写,意为 "详细")后,会展示远程仓库简称 + 完整地址 + 权限类型
    • 第一行:(fetch) 表示这个地址用于拉取代码(从远程下载到本地);
    • 第二行:(push) 表示这个地址用于推送代码(从本地上传到远程);
    • 这里两个地址相同,说明拉取和推送都指向同一个 Gitee 远程仓库。

3.2 SSH协议

SSH是一种安全协议,通过公钥和私钥来验证你的身份,无需每次输入密码。


使用 SSH 方式克隆仓库,由于我们没有添加公钥到远端库中,服务器拒绝了我们的 clone 链接。需要我们设置一下:

第一步:创建SSH Key

ssh-keygen -t rsa -C "自己的邮箱"
然后一路回车

第二步:添加自己的公钥到远端仓库


点击确认后,需要对你进行认证,输入你的账号密码即可。至此,我们的准备工作全部做完,可以clone 了。


成功! 如果有多个人协作开发,GitHub/Gitee 允许添加多个公钥, 只要把每个人的电脑上的
Key 都添加到 GitHub/Gitee,就可以 在每台电脑上往 GitHub/Gitee 上提交推送了。 当我们从远程仓库克隆后,实际上 Git 会自动把本地的 master 分支和远程的 master 分支对应来, 并且,远程仓库的默认名称是 origin 。在本地我们可以使用 git remote 命令,来查看远程库的信息。

四、向远程仓库推送代码

  • 本地提交

在项目目录中新建一个文件,例如file.txt,然后执行**【新建文件 - 编辑文件 - add到暂存库 - commit 到版本库 】**:

复制代码
git add file.txt
git commit -m "create file.txt"

提交时要注意,如果我们之前设置过全局的 name 和 e-mail, 这两项配置需要和 gitee 上配置的用户名和邮箱一致,否则会出错。 或者从来没有设置过全局的 name 和 e-mail,那么我们第一次提交时也 会报错。这就需要我们重新配置下了,同样要注意需要和 gitee 上配置的用户名和邮箱一致。

  • 推送至远程

使用git push命令将本地分支的修改推送到远程仓库。命令格式:

复制代码
git push <远程主机名> <本地分支名>:<远程分支名>

如果本地分支名和远程分支名相同,可以省略冒号后面的部分。例如,将本地的master分支推送到远程的master分支:

复制代码
git push origin master
  • 执行后,如果配置了SSH,不需要输入密码,**就能看到推送成功的提示。**此时刷新Gitee页面,你会发现file.txt已经出现在远程仓库中了。
  • 如果你使用的是HTTPS协议,有个麻烦的地方就是每次推送都必须输入口令。

五、从远程仓库拉取代码

在团队协作中,别人可能会先于你向远程仓库推送代码。此时,你的本地仓库就落后于远程仓库了,需要先拉取最新代码,再继续工作。

5.1 模拟远程修改

  • 我们可以在Gitee网页上直接修改一个文件 ,例如README.md。点击文件,选择"编辑",修改内容后提交。此时远程仓库就有了新的提交。
  • 修改内容:
  • 此时,远程仓库是要领先于本地仓库⼀个版本,为了使本地仓库保持最新的版本,我们需要拉取下远端代码,并合并到本地。 Git 提供了 git pull 命令, 该命令用于从远程获取代码并合并本地的版本。格式如下:

这个命令的作用是:从远程的origin主机拉取master分支的代码,并自动合并到当前分支。

复制代码
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
Unpacking objects: 100% (3/3), done.
From gitee.com:hyb91/git_teaching
 * branch            master     -> FETCH_HEAD
   7ce3183..60e6b0a  master     -> origin/master
Updating 7ce3183..60e6b0a
Fast-forward
 README.md | 2 ++
 1 file changed, 2 insertions(+)

看到"Fast-forward"表示没有冲突,顺利合并。此时再用cat README.md查看,会发现内容已经和远程保持一致了

六、忽略特殊文件

在日常开发中,有些文件我们不希望提交到远程仓库,比如:

  • 编译产生的中间文件(.o.class

  • 本地配置文件(.envconfig.ini

  • 依赖库目录(node_modules/

  • 系统文件(.DS_Store

这时,我们可以使用**.gitignore文件来告诉Git忽略哪些文件。**

6.1 创建.gitignore文件

在Git工作区的根目录下创建一个名为.gitignore的文件(把要忽略的文件名填进去,git就会子自动忽略这些文件了)Gitee在创建仓库时可以自动生成模板,但如果没有,也可以手动创建。

6.2 编写规则

.gitignore文件中的每一行表示一条忽略规则。例如:

复制代码
# 忽略所有以.so结尾的文件
*.so

# 忽略所有以.ini结尾的文件
*.ini

# 不忽略特定文件(即使符合上面的规则)
!test.ini

# 忽略node_modules目录
node_modules/

# 忽略根目录下的config.json文件
/config.json

6.3 提交.gitignore

创建好.gitignore后,我们需要将它提交到仓库中,让Git知道这些规则。

复制代码
git add .gitignore
git commit -m "add .gitignore"
git push origin master

6.4 验证忽略效果

现在,在项目中新建一个a.so文件和一个b.ini文件,然后执行git status

复制代码
touch a.so b.ini
git status

你会看到:

复制代码
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

Git没有提示这些文件被新增,说明忽略规则生效了。

6.5 强制添加被忽略的文件

如果你确实想把某个被忽略的文件提交上去,可以使用-f参数强制添加

复制代码
git add -f a.so

或者 在 .gitignore 加上 !a.so

6.6 检查忽略规则

如果某个文件被忽略了,但你不确定是哪条规则导致的,可以用git check-ignore命令:

复制代码
git check-ignore -v a.so

输出会告诉你.gitignore的第几行规则导致了忽略。

七、给命令配置别名

Git有些命令比较长,比如git statusgit checkout我们可以给它们设置别名,提高效率。

7.1 设置别名

使用git config命令,加上--global参数表示全局生效(对所有仓库有效):

复制代码
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.last 'log -1'

设置完成后:

  • git st 等同于 git status

  • git co 等同于 git checkout

  • git br 等同于 git branch

  • git last 等同于 git log -1(显示最后一次提交)

7.2 查看别名

直接查看Git配置文件,可以看到所有别名:

复制代码
git config --global -l
相关推荐
MX_93592 小时前
git实现重命名——实现远程和本地重命名
git
ljh5746491193 小时前
git cherry-pick 命令
git
尽兴-3 小时前
Git 分支管理核心命令科普指南
数据库·git·分支管理·代码仓库
小陈工3 小时前
Python Web开发入门(一):虚拟环境与依赖管理,从零搭建纯净开发环境
开发语言·前端·数据库·git·python·docker·开源
Sakuyu434683 小时前
Git-GitLab-JenKins
git·gitlab·jenkins
console.log('npc')4 小时前
【无标题】
git
晨非辰4 小时前
Git版本控制速成:提交三板斧/日志透视/远程同步15分钟精通,掌握历史回溯与多人协作安全模型
linux·运维·服务器·c++·人工智能·git·后端
shughui5 小时前
2026Git 下载、安装、使用完整教程(附安装包)
git·github·代码仓库
Moshow郑锴13 小时前
Git如何上传目录到github项目进行初始化
git