git - 从中间(裸)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/master
and refs/remote/origin/master
,但我不知道在开发树中执行的命令,它将我的树与远程/原点/主更改合并。
解决方案
从 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
.
推荐阅读
- swift - SKCropNode 不显示任何内容
- laravel - 为什么我总是需要运行 npm run production 才能看到变化
- c++ - 为什么我的派生类找不到我的基类的类型别名?
- java - 如何通过匹配内部数组中的值来对数组列表中的数组进行分组?
- r - 对大向量进行子集化会使用不必要的大量内存
- c++ - 将 Eigen::SparseMatrix 转换为 cuSparse,反之亦然
- mysql - MYSQL, errno: 150 “外键约束格式不正确”
- javascript - 如何使用 popper.js 和 bootstrap 初始化工具提示
- r - R notebook 停止内联打印图形
- ios - 为什么 List 会改变 SwiftUI 中的背景颜色?