在rebase之后推新的历史?

时间:2012-04-05 14:45:21

标签: git rebase

我将一些更改推送到我们的中央git存储库,然后立即意识到我有一个旧的,现在过时的变化,并且我已经引入了它的合并:

before

然后我使用git rebase来摆脱这个虚假的父母:

after

然后我用git push -f推送到原点。它回答“一切都是最新的”。

现在我希望中央存储库能够匹配本地存储库。然而,当我重新clone项目时,我仍然有一个虚假的父母。更糟糕的是,git想要合并,如果我让它这样做,我会得到我的最新提交两次(一次使用旧的哈希,一次使用新的一次)。

如何让git在没有合并的情况下推送我的内容,并将我的存储库状态作为新状态(基本上,拒绝所有远程差异)?

或者我做错了吗?我想摆脱“当阅读一个属性......”提交时,以及上图中的整个红线。

1 个答案:

答案 0 :(得分:1)

您可以通过各种方式解决此问题。一种方法是使用reset,stash和commit在本地重建历史记录。以下内容将撤消您的上次提交(初始导入...)并将这些更改隐藏起来。

git reset --mixed HEAD^
git stash

现在你可以将你的master重置为你进行合并之前的提交,假设abcd1234是“Testing git”的哈希值。提交:

git reset --hard abcd1234

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

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

现在终于推翻你重写的主人:

git push -f origin master