删除热门提交会导致其他本地存储库出现问题

时间:2017-10-04 23:10:50

标签: git

我有一个包含大量小提交的简单项目。我想摆脱其中的一些。我正在测试一些测试项目。我有一个模拟远程存储库的文件夹以及与其连接的另外两个文件夹test1test2。在我做任何事之前,这是远程和本地存储库的状态:

* 0000002C  (HEAD -> master, origin/master, origin/HEAD) Small commmit 12
* 0000002B  Small commmit 11
* 0000002A  Small commmit 10
* 00000029  Small commmit 09
* 00000028  Small commmit 08
* 00000027  Small commmit 07
* 00000026  Small commmit 06
* 00000020  Big commmit 02
* 00000015  Small commmit 05
* 00000014  Small commmit 04
* 00000013  Small commmit 03
* 00000012  Small commmit 02
* 00000011  Small commmit 01
* 00000010  Big commit 01

我运行git reset --mixed以摆脱一些小提交直到第一个大提交:

git checkout master
git reset --mixed 00000020
git add .
git commit -m "New starting"
git push --force origin master

一切都好。强制推送后,远程存储库已更新,我不再需要所有这些小提交:

* 0000002D  (HEAD -> master, origin/master, origin/HEAD) New starting
* 00000020  Big commmit 02
* 00000015  Small commmit 05
* 00000014  Small commmit 04
* 00000013  Small commmit 03
* 00000012  Small commmit 02
* 00000011  Small commmit 01
* 00000010  Big commit 01

在另一个文件夹中,我获取了更新,这是日志:

* 0000002D  (origin/master, origin/HEAD) New starting
| * 0000002C    (HEAD -> master) Small commmit 12
| * 0000002B    Small commmit 11
| * 0000002A    Small commmit 10
| * 00000029    Small commmit 09
| * 00000028    Small commmit 08
| * 00000027    Small commmit 07
| * 00000026    Small commmit 06
|/
* 00000020  Big commmit 02
* 00000015  Small commmit 05
* 00000014  Small commmit 04
* 00000013  Small commmit 03
* 00000012  Small commmit 02
* 00000011  Small commmit 01
* 00000010  Big commit 01

我不知道如何继续。来自我想要更新的其他文件夹中有0000002D提交origin/master,并且在两个不同的分支中有本地主服务器。您认为现在需要做什么才能使这个本地存储库与第一个文件夹处于相同的状态?我试过git rebase但它失败了。 git merge创建新的提交并将本地masterorigin/master合并,这当然是一种解决方案。

感谢。

1 个答案:

答案 0 :(得分:2)

如果您确信第二个存储库没有第一个存储库中尚未存在的任何更改,请在第二个存储库中运行此更新:

git fetch
git checkout -B master origin/master

这会强制重置您master的本地版本与origin/master相同。

对于这种情况,了解“the perils of rebasing”或在您的情况下重置是很重要的。

简而言之,无论何时重新设置或重置代码,您都在重写提交历史记录。可以直观地认为您正在编辑旧提交,但实际上您正在从旧提交中获取更改并从中创建新提交。

这意味着在更新第二个存储库之前,它仍然拥有所有原始提交。当你更新它时,它只是添加你创建的新提交 - 在你的情况下,“新的开始”,并合并所有。