推送之前:
x----x-----x----x----x----x----x-----x----x (MASTER)
推送之后
---------------------------------------------x---x (MASTER)
| |
x----x-----x----x----x----x----x-----x----x-------
那有点弄乱了代码库,因为所有的历史记录似乎都在一个分支上。之后,有一些新的提交被推到了新的主分支上,然后因为某个不重要的原因,我们决定不想要那些提交,所以我们成功地删除了我们不想要的提交,并同时将主分支还原到了它原来的位置。就像这样:BEFORE(之前)。
---------------------------------------------x---x---x---x---x (MASTER)
| |
x----x-----x----x----x----x----x-----x----x-------
之后
(2)
---------------------------------------------x---x---x---x---x--
| | |
x----x-----x----x----x----x----x-----x----x-----x----------------x (MASTER)
(1) (3)
正如您所看到的,由于那个忘记拉取的人提交的内容现在已经合并到了最初的主分支中。这是通过以下方式实现的:
git checkout <HASH OF COMMIT MARKED AS (1) >
git checkout -b refactor_master
git merge --no-ff <HASH OF COMMIT MARKED AS (2) >
git push origin refactor_master
git merge --strategy=ours mastergit checkout master
git merge refactor_master
git push origin master
这实际上使得那些提交所包含的更改从主分支中消失,同时将主分支恢复为之前的状态。然而,现在我有了一个本不应存在的“分支”。事实上,最后一个标记为(3)的提交并未做出任何更改。它只是“切换”了主分支。有没有办法让这些提交消失?
git
中,所有提交记录都会出现在至少一个分支上 - 那些没有被垃圾回收的分支。 - twalberg