! [remote rejected] xxx-> refs/for/xx change http://igerrit.storm/471494 closed处理

1.git fetch ssh://xxxx/Src/Platform/kernel/xxxxrefs/changes/95/471495/1 && git cherry-pick FETCH_HEAD

push 一个之前分支上被abandon 的提交代码,直接push 后报如下错误:
xxxx@xxx-HP-EliteDesk-800-G2-SFF:~/work/xxx$ git push origin xxxx:refs/for/xxx
Enumerating objects: 9, done.
Counting objects: 100% (9/9), done.
Delta compression using up to 4 threads
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 626 bytes | 156.00 KiB/s, done.
Total 5 (delta 4), reused 0 (delta 0)
remote: Resolving deltas: 100% (4/4)
remote:
remote: Processing changes: refs: 1, done
To ssh://igerrit.storm:xxxSrc/Platform/kernel/xxx.git
! [remote rejected] xxxx -> refs/for/xxx (change http://igerrit.storm/471494 closed)
error: failed to push some refs to ‘ssh://igerrit.storm:xxx/Src/Platform/kernelxxx.git’

原因: http://igerrit.storm/471494 closed 已经被abandon ,closed
解决方法:
git commit --amend==》删除commit id 然后再push即可

<think>好的,我现在需要解决Git提交被远程拒绝的问题。用户提到了“git remote rejected change closed solution”,这可能是指提交时遇到远程仓库拒绝的情况。首先,我得回忆一下常见的Git远程拒绝的原因和解决方法。 根据之前的引用资料,比如引用[3]提到,如果推送包含大文件的历史记录,即使后来删除了,GitHub仍然会拒绝推送,需要重写历史。这可能是一个原因。另外,可能还有分支被保护、权限不足、合并冲突未解决等情况。 首先,用户需要检查具体的错误信息。常见的错误信息包括“non-fast-forward”、“push被拒绝因为当前分支的最新提交不在远程分支上”或者“权限不足”等。例如,如果错误是non-fast-forward,说明远程分支有本地没有的新提交,需要先拉取合并再推送。这时候可以用git pull --rebase来变基,或者直接git pull然后解决冲突再推送。 如果是权限问题,比如没有推送权限到该分支,可能需要检查远程仓库的设置,或者联系管理员。另外,如果分支被保护,比如GitHub的主分支默认受保护,不允许强制推送,这时候需要解除保护或使用其他方法。 另一个可能性是提交历史被修改,比如使用了rebase或amend,导致本地历史与远程不一致,这时候需要强制推送,但要注意强制推送的风险,尤其是在团队协作中。引用[3]提到重写历史需要强制推送,但可能导致他人工作受影响,所以需要谨慎使用。 还有可能是存在未解决的合并冲突,在合并或拉取时没有正确解决冲突并提交,导致推送被拒绝。这时候需要检查状态,解决冲突后提交再推送。 另外,用户提到的“change closed”可能是指某个变更已经被关闭,比如在Gerrit等代码审核系统中,如果变更已关闭,再次推送可能会被拒绝。需要重新打开或创建新的变更。 根据引用[1],使用git reset --hard可以撤销某些操作,比如stash pop后的冲突。但在这里可能不适用,不过恢复本地分支到远程的状态可能有帮助,比如git fetch origin,然后git reset --hard origin/master,再重新提交。 步骤可能包括: 1. 查看错误信息,确定具体原因。 2. 如果是non-fast-forward,执行git pull或git pull --rebase。 3. 解决冲突后重新提交并推送。 4. 如果存在大文件历史,使用git filter-branch或BFG工具清理后强制推送。 5. 检查分支保护设置和权限。 6. 如果变更已关闭,创建新分支或重新打开变更。 需要提醒用户谨慎使用强制推送,并确保备份代码。同时,如果问题是由于大文件引起的,需要彻底清理历史记录,而不仅仅是删除文件,如引用[3]所述。</think>要解决Git提交被远程拒绝的问题,需根据具体错误原因采取以下步骤: ### 常见原因及解决方案 1. **远程分支包含本地未拉取的提交(non-fast-forward错误)** - 执行命令拉取远程最新提交并合并: ```bash git pull origin <分支名> ``` - 若存在冲突,解决冲突后提交,再推送: ```bash git add . git commit -m "解决冲突" git push origin <分支名> ``` 2. **强制推送历史修改(慎用)** 若本地通过`git rebase`或`git commit --amend`修改了历史,需强制推送: ```bash git push --force origin <分支名> ``` **注意**:强制推送会覆盖远程历史,可能影响其他协作者[^3]。 3. **清理大文件历史记录** 若因历史中包含大文件被拒绝(如GitHub提示文件大小超限): - 使用`git filter-branch`或`BFG Repo-Cleaner`清理大文件: ```bash git filter-branch --force --index-filter "git rm --cached --ignore-unmatch 大文件路径" --prune-empty --tag-name-filter cat -- --all ``` - 清理后强制推送: ```bash git push --force origin <分支名> ``` 4. **分支保护或权限不足** - 检查远程仓库设置,确认分支是否被保护(如GitHub的Protected Branches)。 - 联系仓库管理员获取推送权限。 5. **变更已关闭(Gerrit等代码审核系统)** 若推送的变更在审核系统中被标记为“Closed”,需创建新分支或重新提交补丁。 --- ### 操作流程示例 1. **查看错误详情**: ```bash git push origin main ``` 若输出`rejected: non-fast-forward`,则需拉取远程提交: ```bash git pull origin main ``` 2. **解决冲突后推送**: - 手动解决冲突文件。 - 标记冲突已解决: ```bash git add 冲突文件路径 ``` - 提交并推送: ```bash git commit -m "合并远程变更" git push origin main ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kaira88

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值