快速回忆
git remote add neworigin xxx.git
git push neworigin --all
一个本质:remote的name就类比C语言的指针或者服务端的别名
背景
在公司或者外部,经常需要从某个仓库fork到自己的仓库,比如github上fork。在 github 或者 gitee 上可以通过点击 fork 直接创建自有的仓库。但有些场景自己有一个含有commit信息的本地仓库,希望新建一个云端仓库,提交本地代码并且保留commit信息,怎么操作?
本文将会根据这个场景记录使用的2条命令,以及通过这个命令理解1个本质和git设计中remote的概念。
2条命令
结论先行:
# 1. 下载某个仓库到本地,比如:
# git clone git@github.com:pyserial/pyserial.git
## 注意clone之后,在本地 git config -l可以看到云端服务器叫做origin
# 2. 云端创建某个新仓库
## web 操作
# 3. 直接提交本地仓库到云端的新仓库
git remote add myrepo git@github.com:[yourselfnew]/pyserial.git
## git config -l 可以看到2个remote
# 4. 提交到远程
git push myrepo --all
# 如果要操作到新的远端,就使用新的名字neworigin提交到远端,同时原来的origin还是在,只是本地仓库具有了2个远端。本质其实是git是分布式仓库,1个本地,2个remote,都能够自由的push到对端。
添加前:
添加中:
添加后:
1个本质
平时提交命令使用的git push origin这里的origin本质可以理解是云端服务器的一个别名,用 C 语言可以类比理解为云端 URL 的一个指针。
本地仓库可以有多个remote的服务器,那么就可以有多个指针,只是不同的指针指向对应仓库。
用 myrepo,指代远端新的仓库
用 origin,指代远端原来的仓库
从这个维度就能更加理解为什么经常提交代码需要添加origin,然后再指定分支,就是为了指定往哪里提交。比如:
# 假设本地新提交了5个commit此时可以提交到两个服务器
## git commit -m "xxx"
## 提交到服务器A
git push origin master # 提交到URL A的git
## 提交到服务器B
git push myrepo master # 提交到URL B的git
从 git 的设计者角度看,就是为了保存多个仓库。就有一个remote相关的模块。比如这里是常用的remote add 新增一个remote,同样应该也就有CRUD 增删查改各种操作,这样理解就能更加通透。
比如,修改origin为其他名字:
git remote rename <old_name> <new_name>
# <old_name> 是当前远程仓库的名称, <new_name> 是您想要设置的新名称。
# 例如,如果您的远程仓库名称原来是origin,您想要将其改名为new-origin,您可以执行以下命令:
git remote rename origin new-origin
- git man手册信息
其他信息
- 平时 git push 默认会有一个 remote 服务器无需指定
- 需要 push 到特定服务器使用
- 站在git的设计者角度推测有remote的对象,然后推测有增删查改,可以灵活熟悉git