Git使用—把当前仓库的一个分支push到另一个仓库的指定分支、基于当前仓库创建另一个仓库的分支并推送到对应仓库(mit6828)

把学习过程中遇到的Git问题汇总如下(后续学习遇到问题会及时更新此专栏):

Git原理及常用命令小结——实用版(ing......)、Git设置用户名邮箱-CSDN博客

解决git每次push代码到github都需要输入用户名以及密码-CSDN博客

在VScode中使用Git将本地已有文件夹提交到Github仓库以便于使用版本控制进行项目开发-CSDN博客

Git使用—把当前仓库的一个分支push到另一个仓库的指定分支、基于当前仓库创建另一个仓库的分支并推送到对应仓库(mit6828)-CSDN博客

目录

背景提示

将当前仓库的一个分支push到另一个仓库的指定分支

直接基于仓库rep1中的某个分支创建新的分支并将其推送到目标仓库rep2

补充

参考链接


背景提示

        最近打算做一下mit6.828的项目,这个仓库使用问题困扰了自己一段时间,由于6828官方提供的代码有很多分支,克隆下来后如果不解除和原有仓库的关联,可以正常使用,但自己修改代码无法提交,并且不能使用自己的仓库。我希望的是将克隆下来的代码,作为自己的一个仓库,推送到自己Github网站,随后基于Git进行代码分支管理、开发。问题:将克隆的代码和官方仓库解除关联:

git remote rm origin

        执行此操作后本地代码显示没有任何分支,无法切换到对应目录,无法进行后续操作,自己探索,一下。需要实现的功能是创建一个自己的仓库,当需要使用到对应分支时,将官方仓库对应分支拷贝到自己仓库对应分支。

将当前仓库的一个分支push到另一个仓库的指定分支

下面内容转载自:GIT操作:把当前仓库的一个分支push到另一个仓库的指定分支_gitpush到指定branch-CSDN博客

有时候我们想把当前仓库A的一个指定分支1 推给 另一个仓库B的另一个指定分支2,

可以通过2个主要命令git remote xxx 和 git push newOrigin 当前分支:目标分支 完成。

示例
假设有2个仓库rep1和rep2

rep1:当前仓库  rep2:目标仓库

我们想把当前仓库[rep1]的指定分支[branch1]

推给

另一个仓库[rep2]的指定分支[branch2]

具体步骤如下:

1.在当前仓库操作:更新代码库

git pull

2.查看当前仓库origin只有一个,接下来我们要add另一个仓库的origin 

git remote
or
git remote -v(可以看到origin的url)

3.newOrigin:远程仓库名称,可以随便起个方便记忆的,目的是在本地添加一个新的远程链接 

git remote add newOrigin master
 
eg:
 
git remote add rep2 branch2
or
git remote add rep2 master

        rep2后面是rep2的一个分支,可以指定为master或你要push的目标分支,都可以。执行完命令后可以再次通过git remote or git remote -v查看现在有几个origin,大家可以自行试一试。 

4.为新加的仓库设置上目标仓库的url地址(以下以gitee为例)

git remote set-url rep2 https://gitee.com/greatoak/rep2.git

5.在A的本地仓库进行git push

git checkout 本地分支名
git push <远程主机名> <本地分支名>:<远程分支名>
 
eg:
 
git checkout branch1
git push newOrigin branch1:branch2

        newOrigin是你想push上哪个远程库,branch1是你想push的那个分支,branch2是push到远程的那个分支。

注意,push前先切换到要push的当前分支上,然后再push。

        使用上述命令完成操作后,在仓库rep2拉取创建的推送的分支的最新代码时,会报错:git pull "fatal: 拒绝合并无关的历史"

查了一下这个原因参考:

  • 当你执行 git pull 并遇到错误 "fatal: 拒绝合并无关的历史" 时,这是因为本地分支和远程分支之间的提交历史并不相关(即它们没有共同的祖先提交)。这种情况通常发生在以下几种场景:
  1. 你初始化了一个新的本地仓库,然后试图从一个远程仓库中拉取代码。本地仓库和远程仓库之间没有任何共同的提交历史。
  2. 远程仓库和本地仓库是由不同的历史创建的,比如远程仓库是一个独立创建的项目,而你的本地仓库是从零开始的

         在pull命令后添加 --allow-unrelated-histories参数解决:

git pull origin feat/util --allow-unrelated-histories

直接基于仓库rep1中的某个分支创建新的分支并将其推送到目标仓库rep2

        通过以上操作能够实现自己想要的效果,但又思考了一下,如果我每开发一个对应的分支,都需要关联新的分支到源仓库rep1,随后从源仓库rep1将新的分支推送到目标分支岂不是太麻烦了。

        直接在关联了目标仓库Git的代码中,基于想要的分支创建新的分支,并将其提交到目标仓库中。实现方式参考乳如下:

1、查看源仓库和目标仓库

wt@wt:~/Backend/mit6828/codes/xv6-labs-2020$ git remote -v
origin	git://g.csail.mit.edu/xv6-labs-2020 (fetch)
origin	git://g.csail.mit.edu/xv6-labs-2020 (push)
wt_rep	git@github.com:Wwt15537588047/mit6828.git (fetch)
wt_rep	git@github.com:Wwt15537588047/mit6828.git (push)

        上述仓库origin是mit6.828官方仓库,wt_rep仓库是基于第一种实现方式关联的目标仓库。

2、查看远程源仓库和目标仓库的分支:

git branch -a

3、切换到对应分支:

git checkout origin/lazy ;源仓库的对应分支。

4、 基于源仓库的某个分支创建新的分支:

git checkout -b new-branch

5、提交本地修改:

git add . 和 git commit -m "new-branch"

6、将新分支推送到目标仓库(我这里是wt_rep):

git push wt_rep new-branch。

7、设置跟踪分支:(这一步我直接跳过了)

git push --set-upstream wt_rep new-branch

        以上操作完成后基本实现了基于源仓库rep1的某个分支创建新分支并将新分支推送到目标仓库rep2。此时使用命令git branch --remote从目标仓库拉取所有远程分支并不会出现刚刚新创建的分支。

        按照以下命令从配置的远程仓库拉取所有的分支:(前两条命令只需要执行一条即可)

git fetch origin #从配置的远程仓库origin拉取所有分支
git fetch --all  #从配置的所有远程仓库拉取分支
git branch -a    #获取所有远程仓库和本地仓库的分支的信息

补充

git remote -v     #获取所有远程仓库的信息
git branch        #获取所有本地分支
git branch -r     #获取所有远程分支
git branch -a     #获取所有远程分支和本地分支
git fetch --all   #当维护多个远程仓库时,并且希望获取所有远程的更新时使用
git fetch origin  #仅仅维护一个默认仓库origin,并希望获取origin仓库的更新时使用
git remote prunge origin  #清除本地缓存并重新获取远程分支

        其他Git相关操作请参考笔者其他文章 

参考链接

GIT操作:把当前仓库的一个分支push到另一个仓库的指定分支_gitpush到指定branch-CSDN博客

git pull "fatal: 拒绝合并无关的历史"-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值