【问题标题】:How do I squash all commit history and push into another remote repository?如何压缩所有提交历史并推送到另一个远程存储库?
【发布时间】:2017-06-20 22:10:30
【问题描述】:

经过多次尝试,我无法弄清楚。我有两个本地分支机构,mastertests。我有两个对应的远程分支具有相同的 repo,origin/masterorigin/tests。我有另一个远程分支public/master。我在本地master 和远程origin/master 上都有一些提交历史记录。现在,我想压缩origin/master 的所有提交并推送到远程分支public/master。我不知道该怎么做。

我尝试在新的本地分支上执行rebase,但没有成功。

【问题讨论】:

  • “没有工作”是什么意思?

标签: git github rebase squash


【解决方案1】:

重置为您的第一个提交,然后修改,最后强制推送。

git pull origin master
git checkout master
git reset --soft <my-first-commit>
git commit --amend -m "New commit message"
git push public master --force-with-lease

如果最后一个命令给出“stale info”错误,则

  • 在最后一条命令之前运行git fetch public master,或者
  • 运行git push --force-with-lease public +master 而不是最后一个命令。

你可以像这样找到你的第一个提交:

git rev-list --max-parents=0 HEAD

【讨论】:

  • 最后一条命令 (git push public master --force-with-lease) 出错。 ! [rejected] master -&gt; master (stale info) public/master 里面也有一些内容。但这不重要。
  • 好的。有效。但是在推送之前我需要做git pull public master。所以,请添加该命令,我会接受答案。非常感谢!
  • @soham.m17 当然。不过,我使用了fetch 而不是pull,因为我们只需要与远程通信来更新我们的陈旧信息。我们实际上不需要拉。我还提供了另一个可能有效的选项。
  • 好的。对于其他人和将来的参考,这是我使用的:git pull public master --allow-unrelated-histories
【解决方案2】:

也可以通过检查一个孤立分支(它将携带当前工作树以进行第一次提交)来工作,然后您可以推送到您喜欢的任何远程。

【讨论】:

  • 但这会压缩我在另一个远程分支中所做的所有提交历史记录。
  • 这是问题还是评论?如果这是一个问题:如果您想将新分支的内容替换为远程分支,只需使用push --force。如果是评论:除非您将某些内容推入其中,否则您的远程分支不会被触及。
  • 抱歉,我想说,这将不会压缩所有的提交历史。
  • 什么意思?如果您进行“孤立”签出,则分支的历史记录中将有 no 次提交。因此,如果您提交,您将在分支上获得“第一个”提交(就像一个壁球......减去 cmets)。
  • 好吧,我试过了,但它从不同的分支获取了我所有的提交历史。可能是,我犯了一些错误。但我不确定。上面的命令效果很好。
猜你喜欢
  • 2017-04-11
  • 1970-01-01
  • 2012-08-31
  • 2012-12-06
  • 1970-01-01
  • 2014-01-25
  • 1970-01-01
  • 1970-01-01
  • 2022-07-21
相关资源
最近更新 更多