Git快进取代整个回购删除以前的历史记录

时间:2013-02-20 09:56:01

标签: git github git-branch fast-forward

github上有一个名为 A 的回购。我把这个回购克隆从github克隆到我的本地。原始仓库A有一个名为“a”的分支,它位于A的先前版本。来自仓库所有者的提交删除了历史记录并替换了仓库中的所有文件。在github上,如果你对这两个人进行了讽刺,它会说A and a are entirely different commit histories

我的问题是我希望在所有者快速转发主分支之前推送一个同步类型的提交就像一个备份。但是如果我在提交前git pull(这是一个很好的做法),我肯定会遇到问题,因为它根本没有同步。

最好的解决方案是停止跟踪主人所做的事情,并将其替换为not possible一个我所知道的分支。我该怎么做才能删除快进提交并使其同步回'a'分支。

P.S。回购的所有者得到![rejected] master -> master (non-fast-forward)它试图做一个git pull。说“他的当前分支的尖端落后于其远程对手”

如果任何一部分不清楚请随意问,我连续2天遇到这个问题! 感谢。

2 个答案:

答案 0 :(得分:1)

(如果你在某个地方隐藏了一个问题,我肯定找不到。这是基于猜测你试图问的答案我的答案:)

我不确定为什么你认为盲目git pull在提交之前是一个好习惯。执行git fetch后跟gitk master origin/master确定有意义了解当前状态。然后,您通常希望在git checkout master && git rebase origin/mastergit checkout master && git merge origin/master之间做出决定。

如果您的本地master分支不在某个地方,请首先确保您没有未提交的更改,然后git checkout master && git reset --hard [sha1-of-the-commit-you-want]master分支移动到您喜欢的任何位置。如果您想要使用新的正确状态覆盖origin上的主分支,只需执行git push -f origin master。请注意,如果其他人检查了master中的旧origin,则需要重新提交所有提交以跟随新的master。有关详细信息,请参阅https://www.kernel.org/pub/software/scm/git/docs/git-rebase.html#_recovering_from_upstream_rebase

答案 1 :(得分:0)

我用一个简单的解决方案解决了它。 1.当地的变更是以git commit -a -m 'temp'进行的 我做了一个新的分支,所有这些变化反映在我的本地机器上 3.在主分支上结账了。
git checkout master
在我的原始回购交易后,有一股力量推了推。
git push -f upstream master
现在我的本地和原始仓库完全同步。 附:由于它改变了历史,因此强制推动会发出很多警告。所以要非常小心地使用它。