首页 > 解决方案 > 从中间(裸)USB 记忆棒获取和合并非快进更改的 git 命令是什么?

问题描述

我使用带有裸 git repo 的 USB 记忆棒将提交从开发 PC 传播到无法立即访问的服务器。我的一位队友进行了一些更改,现在我必须合并。

我对我的开发目录进行了一些更改。我犯了他们;我把它们推到 U 盘上。在我将 USB 记忆棒移动到具有 repo 访问权限的计算机后,git push由于它不是原点的快进,所以失败了。一位同事做了一些工作并提交了他的更改,现在实际上有两个分支。然后我执行了一个git fetch将我同事的提交从源端拉到 U 盘上的操作。

但是,带有裸仓库的 USB 记忆棒仍然有它的 refs/heads/master 指向我从我的开发盒推送到记忆棒的更改,而 refs/remote/origin/master 指向我同事的更改我有从原点拉到棍子上。

我能够将更改提取到 USB 记忆棒上,但现在我不知道如何将它们合并到开发 PC 上。我的工作目录中的一个平原git merge告诉我“已经是最新的”。我的 USB 裸存储库中的一个简单git merge内容告诉我“致命:此操作必须在工作树中运行”。

在 U 盘的裸存储库中git show-ref告诉我我有refs/head/masterand refs/remote/origin/master,但我不知道在开发树中执行的命令,它将我的树与远程/原点/主更改合并。

标签: git

解决方案


从 U 盘存储库中获取到您的服务器存储库并合并结果。

git remote add USB /path/to/your/mountable/repo    # once
git fetch USB
git merge USB/master

编辑:啊,好吧,由于某种原因,您的原始/主更改没有被推送或镜像到您的 USB 存储库,您将它们提取到那里的遥控器中。

git fetch USB +refs/remotes/*:refs/remotes/*

refs/remotes/origin/master将从您的 USB 记忆棒中获取refs/remotes/origin/master(以及所有 USB 的远程参考)。

编辑:重新 +refs/remotes/*: 等,这是一个 refspec,请参阅 fetch 文档,push 和 fetch 都使用 refspecs 并解释它们。它是一个 source:destination 模式,带有一个前导 + 用于允许重写,Git 足够智能地填充默认值,以至于很容易不知道它正在发生。默认的 fetch refspec 是+refs/heads/*:refs/remotes/origin/*,巧妙地将远程的分支映射到本地跟踪 refs。

另请参阅文档以进行修订,git尝试您给它的拼写,然后尝试refs/, then refs/tags, then refs/heads, thenrefs/remotes前缀。所以origin/master通常会发现refs/remotes/origin/master.


推荐阅读