首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >一种说服git将一个捆绑包放入活动分支的方法?

一种说服git将一个捆绑包放入活动分支的方法?
EN

Stack Overflow用户
提问于 2021-04-16 20:16:42
回答 2查看 404关注 0票数 1

我有一个中央回购,比如说,有三个分支,branchAbranchBbranchC。我做了一些承诺,比如说,branchB。然后,我需要将提交复制到另一个无法通过网络到达的平台。所以我做了一捆。我做的最后一个包是在,比方说,提交123456f。因此,我通过以下方式创建了我的包:

代码语言:javascript
运行
复制
> git bundle create myrepo.bundle 123456f..HEAD

现在,记住这是在branchB上完成的,在我的另一个平台上,如果我已经签出了branchB,我尝试将这些更改合并到包中

代码语言:javascript
运行
复制
> git fetch myrepo.bundle HEAD:branchB

但有人告诉我

代码语言:javascript
运行
复制
fatal: Refusing to fetch into current branch refs/heads/replace_pipeline_codes of non-bare repository

我可以通过签出branchA (或C)来解决这个问题,并从那里运行相同的fetch命令。但这是尴尬的,并立即提出了一个问题,如果我有一个只有一个分支的回购?

那么,在这种情况下,我应该做什么,是否有办法说服git将一个包取到一个活动的分支中?

顺便说一句,这类似于this question,但是在这个问题中没有提到捆绑,所以我看不出这里的答案是如何适用的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-16 21:37:53

git fetch拒绝更新当前分支的原因是git fetch只更新远程引用,而不是本地签出副本。

您可以通过添加--update-head-ok开关来坚持并获取当前分支,但是结果并不好:签出的文件没有被更改,只有HEAD和git status报告的更改会恢复所有这些新提交。这可能不是你想要的。(但正如@jthill在评论中所指出的那样,只要您的沙箱中没有任何未保存的工作,git reset --hard就会在这一点上解决问题。)

推荐的方法1

如您所说,在进行提取之前先签出另一个分支,然后运行。

代码语言:javascript
运行
复制
git checkout some-other-branch
git fetch myrepo.bundle HEAD:branchB
git checkout branchB

这样,更新与沙箱的当前状态无关,所以一切都很好。

如果您的回购没有其他分支,您可以在分离头模式下签出任何提交,而不是some-other-branch (例如,注释中的@jthill:git checkout @^0签出当前提交)。

推荐的方法2

现在,也许你真正想要的是:

代码语言:javascript
运行
复制
git pull myrepo.bundle HEAD:branchB

当您在branchB上执行此操作时,该操作将以合理的方式工作,更新您的分支和签出沙箱中的文件,并给出以下准确的警告:“警告:获取更新的当前分支头”。

方法3:迂回但更冗长的

我有时在bundle中使用的第三种方法允许我在合并任何东西之前使用我喜欢的图形git日志工具来检查它。它将将包添加为另一个远程设备:

代码语言:javascript
运行
复制
git remote add mybundle <path-to-bundle-file>
git fetch mybundle

然后,在git日志中,包中的分支将显示在mybundle/<branch-name>上,您可以将其合并,就好像它来自连接的远程一样。

虽然有更多的工作要做,但如果您想在应用之前仔细分析包提供了什么,则此方法可能很有用。

票数 2
EN

Stack Overflow用户

发布于 2021-04-16 22:00:42

在工厂默认的合并拖放、快速转发(如果可能的话)设置下,git pull会为您进行提取和合并,

代码语言:javascript
运行
复制
git pull your.bundle HEAD

或者,如果您已经设置了一些拉信任,您可以明确地与

代码语言:javascript
运行
复制
git -c pull.ff=true -c pull.rebase=false pull your.bundle HEAD

他们中的任何一个最终都做了相当于

代码语言:javascript
运行
复制
git fetch your.bundle HEAD
git merge FETCH_HEAD
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67131687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档