在 Git 中撤消遠程提交(git reset -> push -f)【Git 小貼士!】
首先
我整理了关于使用”git reset”命令将自己的环境恢复到特定提交状态的方法,以便进行故障排查等工作(→此处)。
这次是用相同指令,来取消已经推送到远程的提交。
但是,请不要轻易取消远程提交。如果有其他人一起工作,请先确认后再进行操作。
此外,请注意该方法不会留下任何痕迹,完全改变了历史。
操作步骤
我們將繼續進行取消之前放入主分支的修正。
将修正内容合并到本地,并确认其内容。
使用”git pull”命令将修正并合并,使用”git log”命令来确认内容。
若要一次显示更多日志,可以使用”–oneline”选项来方便地实现。
在这里重要的是内容和提交的哈希值。
这次我们想要回到在“收藏功能”之前进行的 f2940ec(从底部数起的第二行)。
$ git pull
... (割愛)
$ git log --oneline -n 20
278f6b2 Merge pull request #165 from yokoba569/v1.7.3_dev
7a23fb5 (origin/v1.7.3_dev, v1.7.3_dev) Merge pull request #164 from yokoba569/#418_お気に入り対応
2394231 (origin/#418_お気に入り対応, #418_お気に入り対応) refs #418 DD対応 修正漏れ
8daa0f3 refs #418 お気に入り機能
f2940ec Merge pull request #163 from yokoba569/#445_起動変更オプション変更
a41ef31 ....
回到特定的提交
我知道了要回退的提交的哈希值,所以我将使用git reset命令。
由于不需要保留更改差异,因此应添加–hard选项。
$ git reset --hard f2940ec
HEAD is now at f2940ec Merge pull request #163 from yokoba569/#445_起動変更オプション変更
现在,本地环境已经恢复到“收藏功能”开始之前的状态。
强制将本地状态推送到远程
因为本地状态已经准备好了,所以我们将强制推送到远程。
在push命令中加入-f选项。
$ git push origin master -f
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/yokoba569/SampleProject.git
+ 278f6b2...f2940ec master -> master (forced update)
工作已经完成了。
最后
這裡是我們在不小心將更改合併到主要版本時所求助的地方。
在進行工作之前,我們應該確認好拉取請求的合併目標。