一种说服git将bundle提取到活动分支中的方法?
我有一个中央回购,有三个分支机构,一种说服git将bundle提取到活动分支中的方法?,git,branch,Git,Branch,我有一个中央回购,有三个分支机构,branchA,branchB,和branchC。我在,比如说,branchB中进行了一些提交。然后我需要将提交复制到另一个我无法通过网络访问的平台。所以我做了一个包裹。我做的最后一个包是,比如说,提交123456f。因此,我通过以下方式创建包: > git bundle create myrepo.bundle 123456f..HEAD 现在,请记住这是在branchB上完成的,在我的另一个平台上,如果我签出了branchB,我会尝试将更改合并到bu
branchA
,branchB
,和branchC
。我在,比如说,branchB
中进行了一些提交。然后我需要将提交复制到另一个我无法通过网络访问的平台。所以我做了一个包裹。我做的最后一个包是,比如说,提交123456f
。因此,我通过以下方式创建包:
> git bundle create myrepo.bundle 123456f..HEAD
现在,请记住这是在branchB
上完成的,在我的另一个平台上,如果我签出了branchB
,我会尝试将更改合并到bundle中
> git fetch myrepo.bundle HEAD:branchB
但有人告诉我
fatal: Refusing to fetch into current branch refs/heads/replace_pipeline_codes of non-bare repository
我可以通过签出branchA
(或C
)并从那里运行相同的fetch命令来解决这个问题。但这很尴尬,并立即引发了一个问题:如果我只有一家分行进行回购,我该怎么办
那么,在这种情况下,我该怎么办呢?有没有办法说服git将bundle提取到活动分支中
顺便说一句,这与类似,但在这个问题中没有提到捆绑,因此我不认为这里的答案适用。git fetch拒绝更新当前分支的原因是,
git fetch
是一种只更新远程引用的操作,而不是本地签出副本
您可以通过添加--update head ok
开关来坚持并获取当前分支,但结果并不好:签出的文件没有更改,只有头部,并且git status
报告更改,恢复所有这些新提交。那可能不是你想要的。(但正如@jthill在评论中指出的,只要沙箱中没有任何未保存的工作,git重置--hard
就可以解决这个问题。)
推荐方法1
正如您所说的,在提取之前签出另一个分支,然后运行
git checkout some-other-branch
git fetch myrepo.bundle HEAD:branchB
git checkout branchB
这样,更新与沙盒的当前状态无关,因此一切正常
如果您的回购协议没有其他分支,您可以在分离头模式下签出任何提交,而不是其他分支
(例如,从注释中的@jthill:git checkout@^0
签出当前提交)
推荐方法2
现在,也许你真正想要的手术是:
git pull myrepo.bundle HEAD:branchB
当您在branchB
上执行此操作时,该操作将以合理的方式工作,更新您的分支和签出沙箱中的文件,并给出准确的警告:“警告:获取已更新的当前分支头。”
方法3:迂回但更详细
我有时使用捆绑包的第三种方法是,在将任何内容合并到捆绑包之前,使用我喜欢的图形化git日志工具检查捆绑包。将捆绑包添加为另一个远程:
git remote add mybundle <path-to-bundle-file>
git fetch mybundle
git远程添加mybundle
git获取mybundle
然后,在git日志中,bundle中的分支将显示在mybundle/
中,您可以将其合并,就像它来自连接的远程服务器一样
在做更多工作的同时,如果您想在应用捆绑包之前仔细分析它提供的内容,此方法可能会很有用。git fetch拒绝更新当前分支的原因是,
git fetch
是一种只更新远程引用的操作,而不是本地签出副本
您可以通过添加--update head ok
开关来坚持并获取当前分支,但结果并不好:签出的文件没有更改,只有头部,并且git status
报告更改,恢复所有这些新提交。那可能不是你想要的。(但正如@jthill在评论中指出的,只要沙箱中没有任何未保存的工作,git重置--hard
就可以解决这个问题。)
推荐方法1
正如您所说的,在提取之前签出另一个分支,然后运行
git checkout some-other-branch
git fetch myrepo.bundle HEAD:branchB
git checkout branchB
这样,更新与沙盒的当前状态无关,因此一切正常
如果您的回购协议没有其他分支,您可以在分离头模式下签出任何提交,而不是其他分支
(例如,从注释中的@jthill:git checkout@^0
签出当前提交)
推荐方法2
现在,也许你真正想要的手术是:
git pull myrepo.bundle HEAD:branchB
当您在branchB
上执行此操作时,该操作将以合理的方式工作,更新您的分支和签出沙箱中的文件,并给出准确的警告:“警告:获取已更新的当前分支头。”
方法3:迂回但更详细
我有时使用捆绑包的第三种方法是,在将任何内容合并到捆绑包之前,使用我喜欢的图形化git日志工具检查捆绑包。将捆绑包添加为另一个远程:
git remote add mybundle <path-to-bundle-file>
git fetch mybundle
git远程添加mybundle
git获取mybundle
然后,在git日志中,bundle中的分支将显示在mybundle/
中,您可以将其合并,就像它来自连接的远程服务器一样
在进行更多工作的同时,如果您希望在应用捆绑包之前仔细分析捆绑包提供的内容,则此方法可能非常有用。在合并拉取的出厂默认设置下,如果可能,快速转发,
git-pull
为您进行提取和合并
git pull your.bundle HEAD
或者,如果您已经设置了一些pull配置,您可以使用
git -c pull.ff=true -c pull.rebase=false pull your.bundle HEAD
这两种方法中的任何一种都相当于
git fetch your.bundle HEAD
git merge FETCH_HEAD
在合并拉取的出厂默认设置下,如果可能,快速转发,
git-pull
为您执行提取和合并
git pull your.bundle HEAD
或者,如果您已经设置了一些pull配置,您可以使用
git -c pull.ff=true -c pull.rebase=false pull your.bundle HEAD
这两种方法中的任何一种都相当于
git fetch your.bundle HEAD
git merge FETCH_HEAD
因此,
git pull
而不是git fetch
听起来像是我想要的。谢谢我在这方面有点生疏。应用捆绑包