0
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?

More than 3 years have passed since last update.

pushした一部ファイルの取り消し方

Last updated at Posted at 2020-12-08

経緯

タスクスクリプトを作成しリモートにpushしてレビューに出そうとしたところ、
Gemfile.lockschema.rbの差分もpushしてしまっていることに気付きました。

bundle installしたときに更新された分です。
自分が入れたgemじゃないし、今回はタスク追加の変更のみpushしたかったので、Gemfile.lockschema.rbの差分pushをなかったことにします。

ログの確認 → コミット巻き戻し → 手直し → force push という手順で行います。

まずはログの確認

$ git log
commit commitID # 今回pushしたもの
Author: author name
Date:   Fri Dec 4 18:48:13 2020 +0900

    タスクの追加

commit commitID # ここの状態に戻す
Author: author name
Date:   Fri Dec 4 15:06:53 2020 +0900

    ロジック削除

commit commitID
Author: author name
Date:   Fri Dec 4 14:57:10 2020 +0900
    
    中央揃えにする

コミット巻き戻し

「# 今回pushしたもの」の一つ前、「# ここの状態に戻す」ところにgit resetで状態を戻します。
git reset commitID

git resetにはオプションがあって、

  • git reset --soft commitID → ワーキングツリー* の変更とステージング* の状態はそのまま残る。
  • --hard → どちらの内容も消える。
  • --mixed → デフォルトはこれ。ワーキングツリーの変更は残るがステージングの状態は戻る。

*ワーキングツリー:ユーザーが作業しているディレクトリ領域。
*ステージング:コミット対象のファイルを登録する領域。git addで登録する。

今回は作ったタスクは残しておきたかったので、デフォルトでgit reset
ワーキングツリーの状態は残し、pushしないファイル(Gemfile.lockschema.rb)はcommit対象から外すため、ステージングを元の状態にしておきます。

コミットを巻き戻したら一応git logで状態をみてみます。

$ git log
commit commitID
Author: author name
Date:   Fri Dec 4 15:06:53 2020 +0900

    ロジック削除

commit commitID
Author: author name
Date:   Fri Dec 4 14:57:10 2020 +0900
    
    中央揃えにする

コミットが一つ消えました。

手直し

Gemfile.lockschema.rbの変更を取り消します。
vsコードで取り消しました。
vsコードの左上、
スクリーンショット 2020-12-08 12.43.37.png
のタブにとび、変更を取り消したいファイルにカーソルを当てて、
スクリーンショット 2020-12-08 12.40.57.png
をクリックします。

force pushする

$ git add .
$ git commit -m"タスクの追加"
$ git -f push origin <作業ブランチ名>

-fがforce pushするときのオプションです。
なぜforce pushするかというと、リモートには先ほどローカルでresetしたcommitが残っているからです。リモートとローカルに差異があるので、そこをforce pushで強制的に上書きしてしまいます。
こうすることで、不要なファイルを含んだコミットが消えて、不要なファイルを除いたコミットが記録されます。

PR出したローカルブランチがすでにないとき

pushした後、早々にローカルブランチ消してしまったといった場合は、
PRをローカルに落として、作業ブランチに移動してからログの確認・・・という手順を踏めばOkです。
git fetch origin pull/{PR番号}/head:{branch名}
git checkout {branch名}

参考

を参考にさせていただきました。

0
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
0
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?