0

我是 Git 新手,所以我不确定如何解决我目前的情况。

我有一个“主”存储库A。然后我将其克隆为存储库B。两者碰巧在同一台机器上,尽管将来它们不会。A是一个遥控器B

我对此的设计是将对 进行更改AB并将简单地从上游拉到更新。B有时可能会有一些局部变化。

问题是我不小心在B而不是A. 在此更改之前,两个存储库是相同的。更改是从以前的提交中还原一些图像(将它们从“原始”状态变为“正确”状态),但我认为它是还原的事实并不重要。然后,注意到我在错误的 repo 上做了这件事,我撤消了我刚刚恢复的内容(在我开始之前将图像设置为原始状态),而是在 "master"/upstream 上进行了更改A

在此处输入图像描述

现在,B再次拥有原始图像,并A拥有新修复的图像。问题是B说它比A. 它为我提供了推送到的选项A,但如果我这样做会出错:

remote: error: 拒绝更新签出分支: refs/heads/master remote: error: 默认情况下,在非裸仓库更新当前分支remote: error: 被拒绝,因为它会使索引和工作树不一致
远程:错误:使用您推送的内容,并且需要“git reset --hard”来匹配远程:错误:工作树到 HEAD。

远程:错误:远程:错误:您可以在远程存储库中将“receive.denyCurrentBranch”配置变量设置为远程:错误:“忽略”或“警告”以允许推入远程:错误:其当前分支;但是,除非您远程:错误:安排更新其工作树以匹配您在某个远程:错误:其他方式中推送的内容,否则不建议这样做。远程:错误:远程:错误:要压制此消息并仍保持默认行为,请将远程:错误:'receive.denyCurrentBranch' 配置变量设置为'拒绝'。到 C:\dev\jenkins-1.501 ![远程拒绝] master -> master(当前已签出分支)

我如何才能B不“领先” A我现在拥有A它应该的样子,我想简单地将更改拉入B.

4

1 回答 1

0

而不是“将更改拉入” B(这意味着“添加新内容”),您需要将B' 的master分支标签指向同一个提交A

既然您确定要摆脱对 所做的所有更改B,这很容易!

第 1 步,获取最新版本(如果您已经是最新版本,则无需操作):

B$ git fetch origin

第 2 步,确保您在机器上B并且在分支上master,等等。

B$ hostname; git status # etc

第 3 步:在 上B,说您现在所在的分支(即master)应设置为与 相同的点origin/master,即“master我在A上次执行 afetch以获取最新信息时看到的”:

B$ git reset --hard origin/master

(顺便说一句,所有这些都是命令行;您正在运行的任何 GUI,您可能必须强制它重新读取底层 git repo 以获取更改。)

于 2013-09-11T23:25:53.747 回答