强制Git变基

7
使用场景:同一代码仓库A、B、B2的三个git克隆。 A和B是普通的,B2是裸的(使用--bare创建)。所有内容在我的控制下,即只有一个用户。
在B站点上,我进行工作(多个git提交),然后推送到B2。
- 在A站点上,git pull B2。 - 在A站点上,git rebase -i xx..HEAD来压缩一些提交并清理历史记录(一个很棒的命令)。 - 问:如何将结果传达给B站点?
我可以做:
- git push --force B2
但这不太对。在git pull B2之后,B站点的工作目录将具有奇怪的历史记录。
我需要某种方式来避免使用--force。我想从B站点正常推送之前丢弃B2上的xx..HEAD。也许:
在B2上(裸仓库)
- git reset --hard xx
我不确定这是否足够。我可以通过从A站点重新克隆(删除B2,git init --bare,从A推送)来完成,但这似乎有些过度。如何推送/拉取Git rebase帖子似乎相关,但我希望得到除“不要这样做”之外的答案。
最重要的是,我如何完全放弃B2上的提交,以便来自A的重新基础历史记录将被接受为新提交?
2个回答

7
 git reset --hard 

扔掉提交是指按照您希望的方式扔掉它们。

2
我需要一种不使用--force的方法。我想在B2上放弃xx..HEAD,然后从A正常推送。嗯,在B2上放弃xx..HEAD,然后从A正常推送几乎就是--force的确切定义。当您拉取到B并且重新基于任何分支到提交xx或更早时,只需再次使用--force即可解决问题。

1
我需要你强制操作,因为我有一些文件无法存储,它们总是再次出现,这是因为CRLF->LF问题,我已经在另一个分支中修复了这个问题。 - holms

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接