0

github 上有一个名为A的仓库。我从 github 将此 repo 克隆到我的本地。原始存储库 A 有一个名为“a”的分支,它是 A 的先前版本。存储库所有者的提交删除了历史记录并替换了存储库中的所有文件。在 github 上,如果你比较这两者,它会说,A and a are entirely different commit histories

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

最好的解决方案是停止跟踪 master 所做的事情并将其替换为我所知道的不可能的分支。我应该怎么做才能删除快进提交并使其同步回“a”分支。

PS repo 的所有者得到![rejected] master -> master (non-fast-forward)它,他试图做一个 git pull。说“他当前分支的尖端在其远程分支的后面”

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

4

2 回答 2

1

(如果您在某个地方隐藏了一个问题,我肯定找不到它。这是我根据猜测您试图问什么的答案:)

我不知道为什么你认为git pull在提交东西之前盲目做是一种很好的做法。做一个git fetch跟随gitk master origin/master肯定是有意义的,以了解当前的状态。然后,您通常要在git checkout master && git rebase origin/master和之间做出决定git checkout master && git merge origin/master

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

于 2013-03-05T12:12:01.643 回答
0

我用一个简单的解决方案解决了它。1. 本地更改是用 提交的
git commit -a -m 'temp'
2. 我创建了一个新分支,所有这些更改都反映在我的本地机器上。
3. 在主分支上进行了结帐。
git checkout master
4. 在提交我的原始仓库后进行了强制推送。
git push -f upstream master
现在我的本地和原始仓库完全同步了。PS 有很多关于强制推送的警告,因为它改变了历史。所以非常小心地使用它。

于 2013-03-06T14:18:15.283 回答