30
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

GitHubに間違ったコミットをpushしてしまった時の対処法

Last updated at Posted at 2017-06-24

#背景

iOSのアプリ開発をしていて
修正した部分をGitHubのリポジトリにpushしようとした時に
間違ったコミットをpushしてしまった。

普段は、修正点の差分をgit add -p
で一つずつ確認しながら

y(Yes) or n(NO)で変更を採用するかしないか(ステージングにあげるかあげないか)を決めているのだが、
今回はミスってgit add .でしてしまった。
(このコマンドだと、ls -aで出てくるような .~~ のファイルの差分とかも含め全て一気に採用してステージングに取り込んでしまう)

これをしてしまったため、
Carthageの不要な差分まで採用してpushしてしまい、
GitHubに上がった差分を見た時にそれに気づいた。
(ああ…これを取り消したいっ)

#対応方法

このようにGitHubにpushしたくなかったコミットの差分を
元に戻すには、

git revert (コミットID)
をする。

これをすると、該当のコミットの変更を取り消ししたコミット
が出来上がる。

これをpushすると、GitHub上でも前の状態に戻る!
ちなみに、間違った時のコミットとそれをrevertしたよというコミットのログは残る。
(まぁ、これは仕方がないことである)

逆に、ローカルで間違った(直前の)コミットをなかったことにしようとして
git reset —hard HEAD^
とかをしてしまうと逆に大変。
(HEADの後の^を二つにしてHEAD^^とすると二つ前のコミットまで戻る)

ローカルでは確かになかったことになりgit logすると
一つ前のコミットまでは戻っているが、
これでGitHubにpushしようとしてもできない上、
GitHubの履歴に合わせてpushできるように戻そうと
慌てて git reset —hard HEAD@{1}
と、(stashした時にpopで戻すような感じで)戻しても、
この戻ってきた間違いコミットのコミットIDは、
GitHubにあげてしまった間違いコミットのコミットIDとは
また別物に変わってしまっているためpushができなくなっている。

なので、GitHubに間違ってpushした時は
間違ったコミットをなかったことにはせず、
素直にgit revert (コミットID)をして、自分のミスを受け入れて
間違ったので取り消しましたとわかるコミットも履歴に残しておこう。

30
25
1

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
30
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?