Git无法从重置中获取更改

时间:2017-03-10 00:47:39

标签: git git-reset

我在本地计算机和远程服务器上设置了三个git存储库。我对本地机器上的源代码进行了更改,推送到服务器上的裸仓库,登录到服务器,然后从裸仓库中取出到我的网站:

Local Machine                    SERVER    
+++++++++++++++++        +++++++++++++++++++++++++++++++++
+  Source Code  +        +                      Website  +
+   repo 1 ---------------->bare repo----------->repo 3  +
+               + [push] +             [pull]            +
+++++++++++++++++        +++++++++++++++++++++++++++++++++

我在本地计算机上重置了一些提交:

                   HEAD
  1     2     3     4
  o-----o-----o-----o

git reset --hard 1


HEAD
  1     2     3     4
  o-----o-----o-----o

然后我将重置推送到裸仓库

git push -f

问题是,我似乎无法将它们从裸仓库中拉到我的网站:

git pull origin master

From bare-repo
 * branch            master     -> FETCH_HEAD
Already up-to-date.

修改:输出git log --graph --oneline --decorate

本地机器:

* 0f8c9c7 (HEAD -> master, origin/master, origin/HEAD) commit 1
* 3e65e8f commit 0
* 821e81f commit -1
* 78c9427 commit -2
* 57ab3d3 commit -3

服务器:

* 5075401 (HEAD, master) commit 4
* 39402d0 commit 3
* 4ebbf54 commit 2
* 0f8c9c7 commit 1
* 3e65e8f commit 0 
* 821e81f (origin/master, origin/HEAD) commit -1
* 78c9427 commit -2

1 个答案:

答案 0 :(得分:1)

您有三个存储库。每个人都有一个master分支。

您在计算机上执行了存储库#1中的git reset。这将你的 master设置为指定的提交。

然后,您从您的计算机到服务器上的存储库#2执行了git push -f origin master:master(或等效)。将存储库#2的master设置为指定的提交。实际上,删除了#2中与您的存储库#1中的git reset一起删除的相同提交。

然后您从存储库#3(“网站”)执行了git pull。这运行git fetch以查看存储库#2中master的位置。然后,存储库#3(在Git版本> = 1.8.4中)根据它从存储库#2的Git获得的内容设置自己的origin/master,然后运行git merge添加任何 new 提交它的(网站)master

但是存储库#3已经在其主服务器上提交了这些提交,和更多。所以它没有做任何事情,并且说“我已经达到了最新状态!事实上,我甚至更多是最新的,所以那里!”

由于您正在尝试删除提交,因此必须让Git#3在存储库#3中工作才能从 主服务器中删除 提交。 Git是围绕添加提交而不是删除提交而构建的。您必须使用git reset删除它们,或强制将Git#3的master更新为Git#2的master,或者沿着这些行强制更新。