2012-04-05 84 views
2

我推一些改变,我们的中央git仓库,然后立刻意识到我有一个旧的,现在已经过时了变化躺在四周,我已经介绍了与它合并:rebase之后推出新的历史?

before

然后我用git的变基摆脱这种虚假父:

after

然后我把这个与git push -f原点。它回答“一切都是最新的”。

现在我希望中央资料库能够与我在本地进行的配对相匹配。但是,当我再次登录该项目时,我仍然有虚假的父母。更糟糕的是,git想要合并,如果我让它这样做,我会得到最新的提交两次(一次是旧哈希,一次是重新绑定后的新哈希)。

如何让git推送我没有合并的东西,并将我的存储库状态作为新的状态(因此基本上拒绝所有远程差异)?

还是我做错了?我想摆脱“阅读财产......”提交时,以及上方图像中的整个红线。

回答

1

你可以用各种方法解决这个问题。一种方法是通过使用重置,存储和提交在本地重建历史记录。以下操作将取消最后一次提交(初始导入...)并保存这些更改。

git reset --mixed HEAD^ 
git stash 

现在,您可以将主重置提交你有你没有在合并之前,假设ABCD1234是的哈希值“测试饭桶。”承诺:

git reset --hard abcd1234 

现在带回藏匿,并再次提交它:

git stash pop 
git add . 
git commit -m 'Initial import of the C++ client library.' 

现在终于推了你重写主:

git push -f origin master 
+0

谢谢,它的工作!不知道'藏匿'。我还必须更改'receive.denyNonFastForwards'来让它接受推送(http://stackoverflow.com/a/1377930/143091)。 – jdm 2012-04-06 12:09:14

+0

快乐为你服务! :) – ralphtheninja 2012-04-06 14:43:58

+0

这就是为什么你的第一次推动没有工作后,你做了rebase。说得通。 – ralphtheninja 2012-04-06 14:47:03