我有一个包含大量小提交的简单项目。我想摆脱其中的一些。我正在测试一些测试项目。我有一个模拟远程存储库的文件夹以及与其连接的另外两个文件夹test1
和test2
。在我做任何事之前,这是远程和本地存储库的状态:
* 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
创建新的提交并将本地master
与origin/master
合并,这当然是一种解决方案。
感谢。
答案 0 :(得分:2)
如果您确信第二个存储库没有第一个存储库中尚未存在的任何更改,请在第二个存储库中运行此更新:
git fetch
git checkout -B master origin/master
这会强制重置您master
的本地版本与origin/master
相同。
对于这种情况,了解“the perils of rebasing”或在您的情况下重置是很重要的。
简而言之,无论何时重新设置或重置代码,您都在重写提交历史记录。可以直观地认为您正在编辑旧提交,但实际上您正在从旧提交中获取更改并从中创建新提交。
这意味着在更新第二个存储库之前,它仍然拥有所有原始提交。当你更新它时,它只是添加你创建的新提交 - 在你的情况下,“新的开始”,并合并所有。