强制 Git 变基

FDS*_*FDS 7 git

用例:同一存储库 A、B、B2 的三个 git 克隆。Repos A 和 B 是正常的,B2 是裸的(用 --bare 制作)。一切都在我的控制之下,即只有一个用户。

在站点 B,我工作(几次 git 提交),然后 git push B2。

  • 在站点 A 上,git pull B2。
  • 在站点 A 上, git rebase -i xx..HEAD 压缩一些提交并清理历史记录(一个很好的命令)。
  • 问:如何将结果传达给站点 B?

我可以:

  • git push --force B2

但这并不完全正确。在 git pull B2 之后,站点 B 工作目录将有一个奇怪的历史记录。

我需要一些不使用 --force 的方法。我想扔掉 B2 上的 xx..HEAD,然后从 A 正常推送。也许:

在 B2(裸回购)

  • git reset --hard xx

不确定这是否足够。我可以通过从站点 A 重新克隆来实现(删除 B2,git init --bare,从 A 推送),但这似乎有点矫枉过正。该如何推/拉的Git重订后似乎有关,但我希望除了“不这样做”的一些答案。

最重要的是,我如何真正彻底地丢弃 B2 上的提交,以便 A 的重新调整历史记录将被接受为新提交?

nes*_*983 7

 git reset --hard 
Run Code Online (Sandbox Code Playgroud)

丢弃提交只是在您希望它们被丢弃的意义上。


Kar*_*ldt 2

我需要一些方法来不使用--force。我想在 B2 上扔掉 xx..HEAD,然后从 A 正常推送。

嗯,在 B2 上扔掉 xx..HEAD,然后从 A 正常推送几乎就是 的精确定义--force。只要在拉取到 B 时再次使用--force,就可以了,只要在拉取之前将 B 中的任何分支变基回提交 xx 或更早的时间即可。