我直接推送到开发分支而没有拉请求如何撤消它?
Posted
技术标签:
【中文标题】我直接推送到开发分支而没有拉请求如何撤消它?【英文标题】:I pushed directly to the develop branch without pull request how do I undo it? 【发布时间】:2019-06-29 13:02:59 【问题描述】:我正在尝试取消 james 推送的所有提交,并在我的本地获取他的提交,然后返回到 Brandon 推送的提交,即
d65fa2faf06a5c4d8d379f963feece2bf2edef98.
我试过了
git revert a586cc1ff0c5abf535a4d0873c458a812dca28dd..1dcc0e8adc5433a5b092e3b813496ac52de7aa43
-- 但由于一些未知的原因,它抛出了这个错误
hint: Waiting for your editor to close the file... error: There was a problem with the editor 'vi'.
Please supply the message using either -m or -F option.
最后它只恢复1dcc0e8adc5433a5b092e3b813496ac52de7aa43
这是我的开发分支的 git 日志
commit 1dcc0e8adc5433a5b092e3b813496ac52de7aa43 (origin/develop, feat_SS_250.fixes)
Author: <james@ueharanoMacBook-Pro.local>
Date: Tue Feb 5 17:50:20 2019 +0900
schema added
commit fee01a2dcf3432b7da6e9e6b1ff030ad288d919d
Author: <james@ueharanoMacBook-Pro.local>
Date: Tue Feb 5 17:48:49 2019 +0900
rebase
commit 7f226d84029e608721417b8e99be1a88c6ae3a84
Author: <james@ueharanoMacBook-Pro.local>
Date: Tue Feb 5 16:03:07 2019 +0900
initial commit
commit a586cc1ff0c5abf535a4d0873c458a812dca28dd
Author: <james@ueharanoMacBook-Pro.local>
Date: Thu Jan 24 11:42:08 2019 +0900
added login.php
commit d65fa2faf06a5c4d8d379f963feece2bf2edef98
Author: brandon <brandon@xxxx.co.jp>
Date: Tue Feb 5 14:52:04 2019 +0900
feat: fp 50
commit 9988b6587f9e2fa77d86e9e1f856bf57e667daca
Author: brandon <brandon@xxxx.co.jp>
Date: Tue Feb 5 14:25:51 2019 +0900
feat: contract 50
【问题讨论】:
将HEAD
倒回到提交d65fa2faf06a5c4d8d379f963feece2bf2edef98
和force
push
'ing origin develop
回到那个状态是一个选项吗?
您的工作流程中是否提供重写历史记录?如果是这样,git reset --hard d65fa2f
然后用-f
推送它。再说一次,由于您的具体情况,它可能不在桌面上。
@RomainValeri 呵呵,以秒为单位。正是我的想法。
现在是半夜,所以我的 push 现在是最新的提交,所以我认为我可以安全地回到 Brandons 的最后一次提交。
【参考方案1】:
你可以...
git reset --hard d65fa2f
git push -f origin develop
注意:建议您在force
推送任何更改之前备份您的遥控器。此外,如果有人拉出了包含 James 更改的分支,他们下次尝试 pull
分支时可能会收到错误。
【讨论】:
我的更改是否仍会转到本地? @Johji 我在git log
中看不到您的任何更改。答案将force
重置origin develop
为布兰登的提交(覆盖log
)。您可以在当前工作目录之外的临时目录中执行此操作(即cd /tmp/foo
、git init .
、git remote add origin ...
、git checkout -b develop
、git pull origin develop
、git reset --hard d65fa2f
、git push -f origin develop
)。这样您就可以确定它不会触及您当前本地工作目录中的任何内容。
我的更改是从 a586cc1ff0c5abf535a4d0873c458a812dca28dd 到 1dcc0e8adc5433a5b092e3b813496ac52de7aa43。我通过执行 git reset --hard d65fa2f 然后 git diff 1dcc0e8adc5433a5b092e3b813496ac52de7aa43 得到我的更改,它获取我的提交并将其放入文件。【参考方案2】:
就我而言,可能我会这样做:
(01) 重置最后提交的数量并保持提交为分阶段:
$ git reset --soft HEAD~<num_of_commit_from_HEAD>
$ git status
$ git log
$ git push -f origin <branch_name>
在这里,你的情况是 num_of_commit_from_HEAD
= 4
和 branch_name
= develop
。
(02) 重置最后提交的数量并删除提交:
$ git reset --hard HEAD~<num_of_commit_from_HEAD>
$ git status
$ git log
$ git push -f origin <branch_name>
在这里,你的情况是 num_of_commit_from_HEAD
= 4
和 branch_name
= develop
。
【讨论】:
以上是关于我直接推送到开发分支而没有拉请求如何撤消它?的主要内容,如果未能解决你的问题,请参考以下文章