通过分支删除进行Git强制推送 | AI生成和翻译
#!/usr/bin/env python3
"""
git_force_push.py
该脚本通过先删除远程分支,再推送本地分支的方式实现"强制推送"。
这在仓库允许分支删除但不允许强制推送的情况下有效。
用法: python git_force_push.py <remote> <branch>
示例: python git_force_push.py origin main
注意:此操作假设您拥有足够的权限且允许分支删除。
请谨慎使用,因为删除分支可能会丢失提交记录。
"""
import subprocess
import sys
def run_command(command):
"""运行shell命令并返回其输出。"""
try:
result = subprocess.run(command, shell=True, capture_output=True, text=True, check=True)
return result.stdout.strip()
except subprocess.CalledProcessError as e:
print(f"运行命令 '{command}' 时出错: {e}")
print(f"标准错误: {e.stderr}")
sys.exit(1)
if __name__ == "__main__":
if len(sys.argv) != 3:
print("用法: python git_force_push.py <remote> <branch>")
sys.exit(1)
remote = sys.argv[1]
branch = sys.argv[2]
# 删除远程分支
delete_cmd = f"git push {remote} :{branch}"
print(f"正在删除远程分支: {delete_cmd}")
run_command(delete_cmd)
# 推送本地分支
push_cmd = f"git push {remote} {branch}"
print(f"正在推送本地分支: {push_cmd}")
run_command(push_cmd)
print("强制推送已成功完成。")
工作原理
- 删除步骤:运行
git push origin :main 删除远程分支(在您的仓库中允许此操作)
- 推送步骤:运行
git push origin main 推送本地分支,在远程重新创建该分支
- 这通过丢弃远程历史记录并用本地历史记录替换,有效地实现了强制推送
- 安全/使用说明:请先在非关键仓库中测试。此操作需要正确的Git设置和权限。如果仓库有额外保护(例如通过钩子),可能会失败。不提供任何保证;Git操作可能具有破坏性