3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Git】 mainブランチにpushしてしまった時の対処方

Posted at

作業ブランチにpushしたつもりがmainブランチにpushしちゃったって話よく聞きますよね。自分はまだしてないけど、性格上いつかやりそうだからその対処方についてここに残して、いつかの自分のためにしたい。
先に結論を話すとgit branch の癖をつけよう。

前提

  • 作業ブランチにgit add ,git commit , git push するつもりが誤ってmainブランチにしてしまった。
  • mainブランチをpullした人はいない

目的

  • mainブランチにpushしてしまったコミット(commit)を取り消して、作業ブランチにpushしなおしたい。

1. 作業ブランチにmainブランチの作業内容を移す

mainブランチでpushしてしまった内容を作業ブランチに移して、pushしなおす。

$ git checkout 作業ブランチ   #作業ブランチに切り替え 

$ git merge main        #mainブランチの最新commitを取り込む

$ git push origin 作業ブランチ #作業ブランチにpushしなおす

2.mainブランチを作業前に戻す

mainブランチから誤ったコミットを削除する。

 #mainブランチに切り替え
$ git checkout main  

 #コミットハッシュを取得
 #ここで取得するコミットハッシュは誤ってcommitしたものではなく、その1つ前(作業前)のコミットハッシュ
$ git log --oneline  

 #作業前のコミットにリセット
$ git reset --hard <作業前のコミットハッシュ>

 #強制的にリモートを上書き
$ git push -f origin main
  • git pushではなくgit push -fの理由
    通常の git push は 「リモートにある履歴より新しいもの」 しか送れない。
    git reset --hard でローカルの履歴を「過去の状態」に戻すと、
    ローカルの方が“古い”状態 になる。
    そのため、強制的にpushする必要がある。

-fはforceの略
image.png

*前提にも書いたがあくまでmainブランチをpullした人がいないことが条件。
チーム開発等の場合は注意する。

pullしていた場合のパターンは別の機会に書くかもしれない。

まとめ

何度もいうがmainがpullされていない確信が持てない場合はこの方法はだめ!

git branchでブランチを確認する癖をつけて!!!

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?