为何推送代码时会附带其他贡献者的历史提交?
解决Git推送附带他人历史提交的问题
问题原因
你创建本地分支时,没有基于upstream/newbranchname分支,而是基于当前所在的其他分支(比如main)创建,导致本地分支包含了其他分支的历史提交。后续即使只修改单个文件,提交的基线依然带着无关历史。
解决方案
情况1:未推送本地修改,或可强制推送自己的远程分支
- 若有未提交的修改,先暂存:
git stash - 切换到目标分支:
git checkout newbranchname - 将本地分支重置为上游分支的最新状态:
git reset --hard upstream/newbranchname - 恢复暂存的修改:
git stash pop - 重新提交你的修改:
git add components/card git commit -m "你的修改描述" - 强制推送到你的远程分支(仅适用于你拥有权限的私有分支,公共分支谨慎操作):
git push origin newbranchname --force
情况2:已推送修改,需要清理历史
- 查看提交历史,记录你自己的提交哈希值:
git log --oneline - 执行交互式变基,基于上游分支清理历史:
git rebase -i upstream/newbranchname - 在弹出的编辑器中,将不属于你的提交前的
pick改为drop,仅保留你自己的提交,保存并退出。 - 若出现冲突,解决冲突后执行:
git add . git rebase --continue - 强制推送清理后的分支:
git push origin newbranchname --force
正确创建跟踪上游分支的方式
下次创建本地分支时,直接基于上游分支创建,避免历史混杂:
git fetch upstream git checkout -b newbranchname upstream/newbranchname
内容的提问来源于stack exchange,提问作者Vivek Jaiswal
相关产品推荐
相关产品推荐

