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
设法完成了它的工作
有关完整详细信息,请查看 here。
我首先尝试使用 BFG
,但我遇到了一些问题,所以我继续使用 git filter-repo
。
- 我确定我已经推送了所有本地提交。
- 我安装了
git filter-repo
brew install git-filter-repo
- 我克隆了一个新的本地存储库 (
git clone
)。
这一步是因为 git-filter-repo
提醒 运行 新克隆的 repo 中的命令。
- 删除凭据文件并将其添加到
.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"
- 新克隆的回购将没有来源。添加它。
git remote add origin <your-repo-clone-url>
- 强制推送到原点
git push origin --force --all
- 最后要求 运行 对其他本地存储库中的所有其他旧分支进行 rebase。
git checkout <the-branch-cut-from-the-old-main>
git rebase origin main
这应该可以解决问题!祝你好运!
我正在尝试撤消已经推送到远程的非常旧的提交。
我环顾四周,认为 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
设法完成了它的工作
有关完整详细信息,请查看 here。
我首先尝试使用 BFG
,但我遇到了一些问题,所以我继续使用 git filter-repo
。
- 我确定我已经推送了所有本地提交。
- 我安装了
git filter-repo
brew install git-filter-repo
- 我克隆了一个新的本地存储库 (
git clone
)。
这一步是因为git-filter-repo
提醒 运行 新克隆的 repo 中的命令。 - 删除凭据文件并将其添加到
.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"
- 新克隆的回购将没有来源。添加它。
git remote add origin <your-repo-clone-url>
- 强制推送到原点
git push origin --force --all
- 最后要求 运行 对其他本地存储库中的所有其他旧分支进行 rebase。
git checkout <the-branch-cut-from-the-old-main>
git rebase origin main
这应该可以解决问题!祝你好运!