跳转至

Git 强制 push 远程分支


2017-12-12 by dongnan

问题描述

git commit 更改并且 push到远程的分支,发现信息有错误,想要回退到之前的版本,并重新 commitpush 但提示以下错误信息。

git push origin test

To git@git.zongming.net:git/cccf.git
! [rejected]        test -> test (non-fast-forward)
error: 无法推送一些引用到 'git@git.zongming.net:git/cccf.git'
提示:更新被拒绝,因为您当前分支的最新提交落后于其对应的远程分支。
提示:再次推送前,先与远程变更合并(如 'git pull ...')。详见
提示:'git push --help' 中的 'Note about fast-forwards' 小节。

目标

强制 push 到远程分支,需要注意的是:本次示例中 git仓库只有一个人使用,所以忽略多人协作导致冲突的问题,需要协调可能的冲突问题。

步骤

  • 重命名文件夹,也是 git 报错误的原因。
git mv irm crm
  • 项目状态
git status
位于分支 test
您的分支落后 'origin/test' 共 1 个提交,并且可以快进。
(使用 "git pull" 来更新您的本地分支)

要提交的变更:
(使用 "git reset HEAD <文件>..." 以取消暂存)

重命名:       irm/default.conf -> crm/default.conf
  • 再次提交
git commit -m "rename"
[test 5a644ff] rename
1 file changed, 0 insertions(+), 0 deletions(-)
rename crmi/{irm => crm}/default.conf (100%)
  • 强制推送到远程分支,注意 -f 选项。
git push -f origin test
# ...省略
To git@git.git.zongming.net:git/cccf.git
 + 1324406...5a644ff test -> test (forced update) 

验证

git log
commit 5a644fffe1132926e668e26ce6f504af7f73dc6b
Author: dongnan <dongnan@zongming.net>
Date:   Tue Nov 21 17:52:35 2017 +0800 

rename
# ...省略

参考

  • https://www.zhihu.com/question/19996736/answer/30883413
回到页面顶部