リモートと差分があってpushできない
業務で、Serverless Frameworkのソースコードを修正して、git pushしたが仲間が同じブランチにgit pushしていた。この場合コミットの差分が解消されていないと、ローカルからリモートにgit pushできない。
解消する方法は私の知ってる方法だと2個ある。
revertの場合
revertの場合だと「巻き戻し」と表現されることがある。
git revert コマンドは作業を前進させながら変更を安全に元に戻すことができる操作です。 コミット履歴でコミットを削除したり隔離したりするのではなく、新しいコミットを作成して指定した変更を打ち消します。 git revert では git reset よりも作業内容を消失するリスクを軽減できます。
1個前のコミットに戻る方法
git revert HEAD
resetの場合
履歴が消えてしまうので使い方によっては注意が必要。使用するときには以下のオプションをつけます。
--soft
: コミットを取り消しても、変更内容はステージングエリアに残ります。--mixed
: コミットを取り消し、変更内容をワークツリーに戻します(デフォルト動作)。--hard
: コミットを取り消し、変更内容もすべて削除します。注意が必要です。仕事では以下のコマンドを使いました↓
コミットを取り消し、変更内容をワークツリーに戻すコマンドの場合。
git reset --mixed HEAD^
最後に
仕事によっては、revertして新しいコミットを作って変更内容を以前のものに戻す方法が推奨されていたりしますが、現場によっては、resetする方法を使用してローカルとリモートの差分を解消するケースもあります。重要なのは、リモートのリポジトリを破壊しないようにすることです。