mainにpush...
常に自身のいるブランチを意識していたはずなのに、うっかりやってしまった・・・個人的には焦る瞬間です。この時にはどうすればいいのか・・・間違った対処と正しい対処の二つを書こうと思います。
間違った対処(あまりよろしくない)
$ git reset --hard
$ git push origin main -f
ログを抹消してなかったことにしようとするのを思いつきそうですが、これは自分の作業内容を完全に吹っ飛ばしますし、mainへのpushを-fつけて強制で行うと、もし、自分のローカルmainがリモートにあるmainより古いものだったら、**その古いところまで逆戻りさせることになるので、他の人の作業内容も吹っ飛ぶことになります。**実際自分は五日分の時間を巻き戻しました。運よく、最新のmainを大ベテランの方がローカルに持っていてくれたおかげでことなきを得ましたが、本当に心臓に悪いです。私は若干の吐き気を催しました。mainを最新で持っていたとしても、やった内容が吹き飛ぶのでやるのはよくないです。
正しい対処
$ git checkout main
$ git pull
$ git checkout -b 取消用のブランチ名
自分の作業内容を元に戻す
$ git push origin 取消用のブランチ名
github上でmergeする
で、その後に、gitのコミットの差分状から作業内容を復帰させて、作業ブランチ上で、pushする。
もしくは
$ git log
自分の間違えたコミットのIDを見つける
$ git revert 間違えたコミットのID
$ git pull
$ git checkout 本来のpushすべき作業ブランチ
$ git merge master
$ git add .
$ git commit -m "コミットメッセージ"
$ git push origin 本来のpushすべき作業ブランチ
git revertは引数に指定したコミットを取消し、addする前まで戻してくれます。念のため、ローカルのmasterをpullで最新にし、作業ブランチでも最新の状態をmergeで反映させてから、本来自分がpushすべきだった作業ブランチへpushします。
まとめ
revertを使う方法が、gitの方では推奨されているようです。
両者の手法はログを汚すことになりますが、こちらの方が間違いはなく、かつ安心です。そしてすぐに申し訳ありませんと言うということです。