如何将git-replace推送到远程仓库?

迈克梅

我已经使用“ git replace”来替换分支(没有共同祖先)22b2b25来进行master提交。我希望此更改是永久的。我对以前的历史不感兴趣。在下面的输出中,前五个提交来自原始master分支,下两个提交来自另一个分支。

当我将其推送到新的存储库时,git-replace丢失了,旧的历史重新出现了。有没有办法使这种改变永久化?

分支主控看起来像原始回购中的以下内容。我想在远程仓库和后续克隆中看到这一点。

[mike@localhost canal_site]$ git log --oneline --decorate
cdf0ae3 (HEAD, origin/master, master) MM: sqlencode course name for ad-hoc courses
2b57df5 MM: fixes for changes so far
7916eaf MM: ad hoc - more refactoring
1e00d22 MM: reformatted code
e36cee1 factored out equal ops
22b2b25 (origin/prod20140313, prod20140313) initial load from production 9-June-2015
08379cd initial inclusion of production files from 9-June-2015

git replace 仅凭光是不够的:仅替换一次提交是不够的。

现在,下一个提交必须将替换后的提交作为父引用。

如“从git中删除一堆提交”所述:

通过git clone备份仓库。
在您不喜欢的提交之后找出您喜欢的第一个提交,并记住其直接祖先的哈希(在下文中bbb)。
然后在您不喜欢的提交之前找到您喜欢的第一个提交(在以下内容中aaa):

git replace bbb aaa

查看您的存储库(带有git log),并检查您的预期更改之后一切是否都应该保持原样。
但是该replace命令只是将一些元信息添加到.git/refs/replace,git命令会相应地解释这些信息
为了使这些更改永久生效,您可以使用git filter-branch

git filter-branch -- --all

然后,您需要强制推送(git push --force),以便使用分支的新历史记录覆盖远程仓库。或者,您只需推送到一个新的空裸仓库。


更新(摘自Stephen的评论)

正如我在2019年10月的“可能破坏/重写历史记录的Git命令”中指出的那样,git filter-branch或BFG已过时。
git filter-repo更容易使用和更高效。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将分支推送到单独的远程仓库中?

如何使用GitPython推送到远程仓库

如何停止将删除的文件推送到远程仓库?

在Eclipse上将新的git分支推送到远程仓库

Git将不同的分支推送到不同的远程仓库?

Git将现有的仓库推送到新的和不同的远程仓库服务器?

git,如何将本地分支推送到特定的远程

Git推送到错误的仓库-需要将我的本地仓库重命名为我远程创建的仓库

如何将使用“git replace”编辑的历史推送到远程

如何将代码推送到git仓库的根目录(GitHub)

将 Git 仓库推送到 Bitbucket

如何在不使用Git将更改推送到远程仓库的情况下将更改提交到本地仓库

为什么git bash不允许我推送到远程仓库?

Git错误:推送到裸仓库时远程解压缩失败

Git:如何将丢失的分支从一个仓库推送到另一个仓库

将两个提交合并为一个并推送到远程仓库

我不应该将Flutter项目中的哪些文件推送到远程仓库中?

如何在另一个用户下推送到远程仓库

如何将本地 git 项目推送到远程服务器?

如何将修订后的提交推送到远程Git存储库?

如何将本地Git分支推送到远程的master分支?

如何将新的本地分支推送到远程Git存储库并进行跟踪?

如何将提交推送到由气隙分隔的远程Git存储库?

Git将原始主机推送到远程仓库,要求输入密码三遍,却无所事事

致命:无法从远程存储库读取。当我将本地仓库推送到远程服务器时

当有人推送到主远程仓库(gitlab)时,如何更新镜像的远程存储库(自己的服务器)?

Git推送到仓库的默认分支

如何使用Git将标签推送到远程存储库?

Git 推送被拒绝推送到远程