繁体   English   中英

git rebase 真的老提交

[英]git rebase really old commit

我正在尝试撤消已经推送到远程的非常旧的提交。 我环顾四周,认为git rebase可能是最好的解决方案。 所以我运行了代码:

git rebase -i <commit-id>

然后编辑:

pick <commit-id> <commit-title>
drop <commit-id> <commit-title>   <- the commit I want to delete
pick <commit-id> <commit-title>

然后尝试使用:wq应用它。 然而,这引发了很多合并冲突(提交大约半年)。

我想撤消提交的原因是我不小心添加了一个带有凭据的文件,我不应该与其他协作者共享该文件。
所以我唯一要撤消的是远程文件的“创建”。

git rebase是最好的方法吗?
如果是这样,有没有办法不触发所有合并冲突(像以前一样合并它们)?
我宁愿不要意外地以错误的方式合并冲突。

此外,我尝试删除的提交不应与未来的提交造成任何冲突。 我尝试在不删除提交的情况下运行git rebase但仍然弹出合并冲突。

感谢@ElpieKay!
git filter-repo成功地完成了它的工作。完整的细节请看这里
我第一次尝试使用BFG ,但遇到了一些问题,所以我继续使用git filter-repo

  1. 我确保我已经推送了所有本地提交。
  2. 我安装了git filter-repo
brew install git-filter-repo
  1. 我克隆了一个新的本地存储库( git clone )。
    这一步是因为git-filter-repo警告在新克隆的 repo 中运行命令。
  2. 删除凭证文件并将其添加到.gitignore 如果您还没有,请确保将凭据保存在其他地方。
git filter-repo --invert-paths --path PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA
echo "YOUR-FILE-WITH-SENSITIVE-DATA" >> .gitignore
git add .gitignore
git commit -m "deleted file <file-name> and added to .gitignore"
  1. 新克隆的 repo 将没有来源。 添加它。
git remote add origin <your-repo-clone-url>
  1. 强制推到原点
git push origin --force --all
  1. 最后要求在其他本地存储库中的所有其他旧分支上运行 rebase。
git checkout <the-branch-cut-from-the-old-main>
git rebase origin main

这应该可以解决问题! 祝你好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM