git - 我怎样才能取消重复我的提交?

标签 git github

在尝试使用 git filter-branch 时,我重复了几个提交 here .我该如何解决这个问题?

最佳答案

警告:
以下命令将丢失 d4f81a8 之后的所有提交以及任何未提交的本地更改。

git reset --hard d4f81a8fff53cbbaabfdf6980fa68bf44e8d77f5
git push --force origin

问题是 git filter-branch 创建了一个完全独立的提交链。当你试图推送到服务器时,git 拒绝了,因为新的头部不是服务器头部的后代。推送会丢失指向旧头部的链中的提交,这通常是您要避免的事情。然而在这种情况下,新链是旧链的副本,因此没有内容丢失。

第一个命令,git reset,通过将 master 分支的头部设置为新链中的最后一次提交来撤消 merge 。 merge 是不合适的,因为链已经具有相同的内容,使旧链变得多余。 --hard 选项还将索引和工作目录重置为该提交。

git push--force 选项告诉 git 忽略新头不是旧头的后代这一事实。同样,这非常危险,因为它会丢失旧链中的提交。要检查服务器上没有新内容,您可以使用 git fetch,它将提交从服务器下载到 ref FETCH_HEAD 但与 git pull 它不会自动 merge 。这样你就可以将你的提交与服务器上的最新提交进行比较,并仔细检查没有遗漏任何内容。

关于git - 我怎样才能取消重复我的提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17203609/

相关文章:

c++ - 对 C/C++ 开发人员的人工支持

github - 我可以拒绝 travis-ci 对组织的访问吗?

GitK 将 remote/origin/master 显示为 master 后面,但 git status 和其他命令坚持一切都是最新的

google-app-engine - 使用 github pages 和 GAE python 进行持续部署

github - 你是如何获得 github 仓库所有者的名字的?

git clone 永远卡在 github 上

git - "git rev-list --all --count"会掉下来吗?

git - 如何运行 git rebase 并忽略空格?

github - 比较时如何忽略github中的空格?

git - 是否有 TFS Git API 用于获取文件夹中文件的上次修改日期?