git 本地仓添加多个远端仓库

知其然,知其所以然!

一般不涉及团队协作开发的话,添加一个远端仓库就够了,也就是你从 gitee 或者 github 上对应的 origin 克隆的那个仓库,比如:

[root@master GitTest]# git remote -v
origin	git@gitee.com:L2392863668/GitTest.git (fetch)
origin	git@gitee.com:L2392863668/GitTest.git (push)

添加远端仓库的命令其实并不复杂,关键是为什么要添加多个远程仓库呢?或者说,添加多个远端仓库以后,需要怎么去用起来?

git remote add <upstream> <url>

当然,既然放出来了这个问题,首先要分析一下原因,一般添加多个远程仓库的实用场景如下:

你有一个本地仓 local、一个远端个人仓 origin(可自由 pull 和 push) 和一个远端主仓 upstream(一般来说只可以 pull ,没有直接 push 的权限),且远端个人仓是 fork 的远端主仓(通过 fork 关系关联)。本地代码则是先推送到远端个人仓,然后再提交 pr 到远端主仓,Committer 审核 pr 以后再合并到主仓。由于主仓的代码是多人协作的,难免可能会出现冲突的情况,所以你一般需要从远端主仓拉取最新代码到本地(强制拉取覆盖本地或者手动处理合并冲突),然后在此基础上再进行开发,以此来减少代码提交时的冲突。

虽然现在像 gitee 等都是支持直接从远端主仓 upstream 强制更新代码到远端个人仓 origin 的,不过你还得再从远端个人仓 origin 拉取代码到本地 local,显然多绕了一圈路。

如果有配置多个远端仓库(origin 和 upstream)的话,代码的拉取和提交就要方便得多了。本文以主分支 maser 为例,实际操作时根据需要进行变更。

克隆远端个人仓

克隆远端个人仓以后,你的远端 origin 默认就添加上了。

[root@master test]# git clone git@gitee.com:L2392863668/GitTest.git
Cloning into 'GitTest'...
remote: Enumerating objects: 247, done.
remote: Total 247 (delta 0), reused 0 (delta 0), pack-reused 247
Receiving objects: 100% (247/247), 1.27 MiB | 626.00 KiB/s, done.
Resolving deltas: 100% (96/96), done.
[root@master test]# ll
total 0
drwxr-xr-x. 4 root root 165 Dec 15 20:57 GitTest
[root@master test]# cd GitTest/
[root@master GitTest]# git remote -v
origin	git@gitee.com:L2392863668/GitTest.git (fetch)
origin	git@gitee.com:L2392863668/GitTest.git (push)

本地添加远端主仓

一般也称为上游仓库(upstream)

[root@master GitTest]# git remote add upstream git@github.com:2392863668/GitTest.git
[root@master GitTest]# git remote -v
origin	git@gitee.com:L2392863668/GitTest.git (fetch)
origin	git@gitee.com:L2392863668/GitTest.git (push)
upstream	git@github.com:2392863668/GitTest.git (fetch)
upstream	git@github.com:2392863668/GitTest.git (push)

从主仓拉取代码到本地

完全以远端主仓为准

由于你的个人仓 origin 可能会和远端主仓 upstream 的代码冲突(比如其他协作者的 pr 先你一步合并到主仓了,导致你自己的 pr 合并不进去),这时候你可以选择直接丢弃掉本地修改,完全以主仓为准:

[root@master GitTest]# git fetch upstream master; git reset --hard upstream/master
From github.com:2392863668/GitTest
 * branch            master     -> FETCH_HEAD
HEAD is now at 1912baa deal merge conflict in hello.txt

与本地修改进行合并

如果你要保留本地已经做过的修改,请从主仓拉取代码并进行合并(如果有冲突的话,注意处理合并冲突):

[root@master GitTest]# git pull upstream master
remote: Enumerating objects: 26, done.
remote: Counting objects: 100% (26/26), done.
remote: Compressing objects: 100% (19/19), done.
Unpacking objects: 100% (26/26), 3.82 KiB | 279.00 KiB/s, done.
remote: Total 26 (delta 7), reused 19 (delta 5), pack-reused 0
From github.com:2392863668/GitTest
 * branch            master     -> FETCH_HEAD
 * [new branch]      master     -> upstream/master
Merge made by the 'recursive' strategy.
 hello.txt   |  3 +--
 looking.txt |  1 +
 readme.txt  | 13 +------------
 world.txt   |  1 +
 4 files changed, 4 insertions(+), 14 deletions(-)

本地推送到远端个人仓

直接强制推送 

由于之前你的本地仓 local 和远端个人仓 origin 的代码是一致的,如果你是强制从远端主仓 upstream 更新的话,推送到远端个人仓的时候也需要强制推送。

[root@master GitTest]# git push -f origin master
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.2]
To gitee.com:L2392863668/GitTest.git
 + 7710a4c...1912baa master -> master (forced update)

合并后推送

如果你已经处理过合并冲突的话,推送到个人仓的时候就不会再冲突了。

[root@master GitTest]# git push origin master
Enumerating objects: 38, done.
Counting objects: 100% (34/34), done.
Delta compression using up to 4 threads
Compressing objects: 100% (26/26), done.
Writing objects: 100% (28/28), 3.95 KiB | 252.00 KiB/s, done.
Total 28 (delta 9), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.2]
To gitee.com:L2392863668/GitTest.git
   b65b892..7710a4c  master -> master

在个人仓提交 pr

提交 pr 合并请求这个我就不啰嗦了,需要了解的话请看我的另外一篇博客:GitHub 的 pull request 测试_TomorrowAndTuture的博客-CSDN博客_pull request 测试

<think>好的,我现在需要帮助用户了解如何在本地初始化Git仓库并连接到远程仓库。首先,我应该回忆一下Git的基本操作步骤。用户可能刚接触版本控制,所以需要从基础开始解释,确保步骤清晰易懂。 第一步应该是初始化本地仓库。我记得使用`git init`命令可以在当前目录创建一个新的.git子目录,这个目录包含了所有的仓库元数据。这时候用户的工作目录就变成了一个Git仓库,可以开始跟踪文件的变化了。可能需要提醒用户,这个命令只需要在项目根目录执行一次。 接下来,用户需要添加文件到仓库。这里涉及到`git add`命令,用于将文件添加到暂存区。可能需要解释暂存区的作用,即暂时保存改动,准备下一次提交。如果用户有多个文件,可以使用`git add .`来添加所有文件,或者指定具体文件名。 然后是提交更改,使用`git commit -m "提交信息"`。这里要强调提交信息的重要性,建议用户写有意义的描述,方便日后查看历史记录。需要说明每次提交都是项目的一个快照,记录当前的状态。 接下来是连接远程仓库的部分。用户需要在GitHubGitee等平台创建远程仓库,获取仓库的URL。然后使用`git remote add origin <url>`命令将本地仓库与远程仓库关联。这里可能需要解释`origin`是远程仓库的默认名称,可以自定义,但通常保持默认即可。需要确认用户替换`<url>`为实际的仓库地址,比如HTTPS或SSH链接。 最后是推送本地代码到远程仓库,使用`git push -u origin master`或`main`,取决于默认分支名称。这里需要说明`-u`参数的作用是设置上游分支,方便以后直接使用`git push`而不需要指定远程和分支。可能需要提醒用户,如果远程仓库有README或LICENSE文件,需要先拉取合并后再推送,避免冲突。 另外,考虑到用户可能遇到的常见错误,比如远程仓库名称不符合规则,如引用[3]中的错误提示,仓库名包含非法字符。需要提醒用户检查仓库名称是否符合平台的要求,比如只允许字母、数字、下划线、中划线等,并且以字母开头。此外,在连接远程仓库时,确保URL正确,没有拼写错误。 可能还需要提到,如果用户已经有一个现有的远程仓库,并且本地有文件,是否需要先拉取远程更改再推送。但根据用户的问题,主要关注初始化和连接,可能不需要深入讲解分支合并的问题,除非用户提到冲突。 总结步骤应该是:初始化、添加文件、提交、连接远程、推送。每个步骤给出命令示例,并解释每个命令的作用。同时,注意引用中的错误案例,提醒用户避免类似问题,比如仓库命名规范。 最后生成相关问题,帮助用户进一步学习,比如如何克隆现有仓库、处理推送冲突、管理远程仓库等。这些问题应该围绕用户接下来的可能需求展开,帮助他们深入理解Git的使用。</think>### 如何在本地初始化Git仓库并连接到远程仓库? #### 1. **初始化本地Git仓库** 在项目根目录执行以下命令,创建`.git`子目录以跟踪版本变更: ```bash git init ``` 此命令将当前目录转换为Git管理的本地仓库[^1]。 #### 2. **添加文件到暂存区** 使用`git add`将文件纳入版本控制: ```bash git add . # 添加所有文件 git add filename # 添加特定文件 ``` #### 3. **提交更改** 通过`git commit`记录当前文件快照: ```bash git commit -m "Initial commit" ``` #### 4. **创建远程仓库** 在GitHub/Gitee等平台新建仓库,获取仓库URL(如`https://github.com/username/repo.git`)。 #### 5. **关联远程仓库** 将本地仓库与远程仓库绑定: ```bash git remote add origin <repository-url> ``` 其中`origin`是远程仓库的默认别名,可自定义[^2]。 #### 6. **推送代码到远程仓库** 首次推送需指定远程分支: ```bash git push -u origin master # 若分支名为main则替换为main ``` `-u`参数设置默认推送目标,后续可直接使用`git push`。 --- ### 常见问题处理 - **仓库命名错误**:远程仓库名称需符合平台规则(如仅包含字母、数字、`_`、`-`、`.`,且以字母开头)[^3]。 - **URL错误**:确保远程仓库URL拼写正确,可通过`git remote -v`验证。 - **冲突处理**:若远程仓库已有文件(如README),需先执行`git pull origin master --allow-unrelated-histories`合并历史记录。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值