标签:
有时候我们想在本地修改远程已经提交的某个历史,如果我们在本地修改之后,然后push会有问题,比如说我们先看一下现在的状态:
$ git status On branch dev Your branch is behind 'origin/dev' by 1 commit, and can be fast-forwarded. (use "git pull" to update your local branch)但是我们将改动的版本推送到服务器上的时候,会报错如下:
$ git push origin dev root@192.168.1.180's password: To ssh://root@192.168.1.180:/home/test_web.git ! [rejected] dev -> dev (non-fast-forward) error: failed to push some refs to 'ssh://root@192.168.1.180:/home/test_web.git' hint: Updates were rejected because the tip of your current branch is behin hint: its remote counterpart. Integrate the remote changes (e.g. hint: 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.这里的主要原因就是因为已经push到远程的提交是不能回退提交的,也就是我们不能单独抽出某个提交进行修改,但是此时我们可以使用git push -f 来执行。
我们可以操作如下:
(1)先将远程服务器上最新的代码clone到本地,并建立dev分支。
(2)把返回历史的提交以及之后所有提交的commit ID的顺序都记录下来。
(3)然后我们回退到某个点,也就是git reset SHA --hard
(4)进行文件修改并且对返回的提交进行修改:modify,git add,git commit
(5)用之前记录下来的commit ID反向cherry pick,目标提交后有多少提交都需要使用到。
(6)对当前分支进行push,替换到服务器上的远程分支,需要加-f参数。
标签:
原文地址:http://blog.csdn.net/xinguimeng/article/details/45403303